2009-10-20 9 views
6

je la table SQL suivante,SQL: comment sélectionner un enregistrement unique pour plusieurs ID sur la base de max 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 

Je veux écrire une requête qui me le résultat suivant établi à partir du tableau ci-dessus:

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

Le reuslt ci-dessus contient la dernière (sur la base du dernier datetime pour cette identification). Ce qui signifie que j'ai plusieurs ID d'enregistrement avec datetime.

Je veux obtenir la dernière entrée unique de tous les ID.

Répondre

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

Merci, cela fonctionne pour moi ... – 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

Semble bien, mais s'il vous plaît modifier 'WHERE a.DateTime = (SELECT max (DateTime) 'line to' OERE t1.DateTime = (SELECT Max (DateTime) ' – Prashant

2

Cela devrait également faire ce que vous voulez:

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 
Questions connexes