2009-10-20 10 views
6

mam poniższej tabeli SQL,SQL: jak wybrać pojedynczy rekord dla wielu identyfikatorów na podstawie maksymalnej datetime?

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 

Chcę napisać kwerendę, która będzie zwracać mi następujący zestaw wyników z powyższej tabeli:

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

Powyższy reuslt zawiera najnowsze (na podstawą najnowszej datetime dla tego id) pojedynczego wpisu. Co oznacza, że ​​mam wiele identyfikatorów rekordów z datetime.

Chcę uzyskać najnowszy pojedynczy wpis wszystkich identyfikatorów.

Odpowiedz

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

Dzięki, działa to dla mnie ... – 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

wydaje się dobrze, ale proszę edytować 'GDZIE a.DateTime = (SELECT max (DateTime) 'line to' WHERE t1.DateTime = (SELECT Max (DateTime) ' – Prashant

2

Powinno to również zrobić to, co chcesz:

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