2009-10-20 50 views
6

我有以下SQL表,SQL:如何根據最大日期時間爲多個ID選擇單個記錄?

Id  WindSpeed  DateTime 
-------------------------------------- 
1  1.1   2009-09-14 16:11:38.383 
1  1.9   2009-09-15 16:11:38.383 
1  2.0   2009-09-16 16:11:38.383 
1  1.8   2009-09-17 16:11:38.383 
1  1.7   2009-09-19 16:11:38.382 
2  1.9   2009-09-19 16:11:38.383 
1  1.6   2009-09-19 16:11:38.383 
2  1.2   2009-09-20 16:11:38.383 

我想編寫一個查詢將返回我下面的結果從上面的表中設置:

Id  WindSpeed  DateTime 
-------------------------------------- 
1  1.6   2009-09-19 16:11:38.383 
2  1.2   2009-09-20 16:11:38.383 

以上reuslt包含了最新的(上該id的最新日期時間的基礎)單個條目。這意味着我有多個記錄ID與日期時間。

我想獲得所有id的最新單個條目。

回答

11
SELECT  a.Id, a.WindSpeed, a.DateTime 
FROM   YourTable AS a 
INNER JOIN  
(
    SELECT ID, Max(DateTime) AS DateTime 
    FROM  YourTable 
    GROUP BY ID 
) AS b 
ON   a.ID = b.ID 
AND   a.DateTime = b.DateTime 
+0

謝謝,這個工作對我來說... – Prashant 2009-10-20 12:23:41

5
SELECT t1.Id, t1.WindSpeed, t1.DateTime 
    FROM table1 As t1 
WHERE t1.DateTime = (SELECT Max(DateTime) 
         FROM table1 As t2 
         WHERE t2.ID = t1.ID) 
+0

似乎很好,但請編輯'WHERE a.DateTime =(SELECT MAX(日期時間)'行到'WHERE t1.DateTime =(SELECT Max(DateTime)' – Prashant 2009-10-20 12:19:26

2

這也應該做你想要什麼:

SELECT ID, WindSpeed, [DateTime] 
FROM (
    SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY [DateTime] DESC) AS RowNumber, 
     Id, WindSpeed, [DateTime] 
    FROM MyTable 
) T 
WHERE RowNumber = 1 
相關問題