2009-10-20 14 views
6

tengo la siguiente tabla SQL,SQL: cómo seleccionar un solo registro para múltiples identificadores sobre 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 

Quiero escribir una consulta que me va a devolver el siguiente conjunto de resultados de la tabla anterior:

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

El reuslt anterior contiene la última (en la base de la última fecha y hora para esa identificación) entrada única. Lo que significa que tengo varias identificaciones de registro con fecha y hora.

Deseo obtener la última entrada única de todas las identificaciones.

Respuesta

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

Gracias, esto funciona para mí ... – 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

parece muy bien, pero por favor editar 'DONDE a.DateTime = (SELECT MAX (DateTime) 'line to' WHERE t1.DateTime = (SELECT Max (DateTime) ' – Prashant

2

Esto también debería hacer lo que quiera:

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 
Cuestiones relacionadas