2009-10-20 20 views
6

Tôi có bảng SQL sau,SQL: làm thế nào để chọn bản ghi duy nhất cho nhiều id trên cơ sở datetime tối đa?

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 

Tôi muốn viết một truy vấn mà sẽ trả về cho tôi những kết quả sau thiết từ bảng trên:

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

Các reuslt trên chứa mới nhất (trên cơ sở của datetime mới nhất cho id đó) mục duy nhất. Có nghĩa là tôi có nhiều id bản ghi với datetime.

Tôi muốn nhận được mục nhập mới nhất của tất cả id.

Trả lời

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

Thanks, điều này làm việc cho tôi ... – Prashant

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

vẻ tốt, nhưng xin vui lòng chỉnh sửa 'Ở ĐÂU a.DateTime = (SELECT Max (DateTime) 'dòng đến' WHERE t1.DateTime = (SELECT Max (DateTime) ' – Prashant

2

này cũng nên làm những gì bạn muốn:

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 
Các vấn đề liên quan