SQL obtiene la última date de logging de time

Estoy tratando de get el último logging de date y hora de una tabla que almacena múltiples estados. Mi table se ve así:

+---------+------------------------+-------+ |filename |Dates |Status | +---------+------------------------+-------+ |abc.txt |2012-02-14 12:04:45.397 |Open | |abc.txt |2012-02-14 12:14:20.997 |Closed | |abc.txt |2013-02-14 12:20:59.407 |Open | |dfg.txt |2012-02-14 12:14:20.997 |Closed | |dfg.txt |2013-02-14 12:20:59.407 |Open | +---------+------------------------+-------+ 

Los resultados deberían ser

 +---------+------------------------+-------+ |filename |Dates |Status | +---------+------------------------+-------+ |abc.txt |2013-02-14 12:20:59.407 |Open | |dfg.txt |2013-02-14 12:20:59.407 |Open | +---------+------------------------+-------+ 

Si desea una fila para cada nombre de file, que refleje un estado específico y una list de la date más reciente, este es su amigo:

 select filename , status , max_date = max( dates ) from some_table t group by filename , status having status = '<your-desinetworking-status-here>' 

¡Fácil!

 SELECT * FROM table WHERE Dates IN (SELECT max(Dates) FROM table); 
 SELECT TOP 1 * FROM foo ORDER BY Dates DESC 

Devolverá un resultado con la última date.

 SELECT * FROM foo WHERE foo.Dates = (SELECT MAX(Dates) FROM foo) 

Devolverá todos los resultados que tengan la misma date máxima, al milisegundo.

Esto es para SQL Server. Dejaré que usted use la function DATEPART si quiere usar dates pero no veces.

Teniendo en count que max (dates) puede ser diferente para cada nombre de file, mi solución:

 select filename, dates, status from yt a where a.dates = ( select max(dates) from yt b where a.filename = b.filename ) ; 

http://sqlfiddle.com/#!3/c94a2/2

HTH

esto funciona

 SELECT distinct filename ,last_value(dates)over (PARTITION BY filename ORDER BY filename)posd ,last_value(status)over (PARTITION BY filename ORDER BY filename )poss FROM distemp.dbo.Shmy_table 

La syntax exacta dependerá de la database, pero algo como:

 SELECT * FROM my_table WHERE (filename, Dates) IN (SELECT filename, Max(Dates) FROM my_table GROUP BY filename) 

Esto le dará los resultados exactamente lo que está solicitando y mostrando arriba. Fiddle: http://www.sqlfiddle.com/#!2/3af8a/1/0

 select max(dates) from yourTable group by dates having count(status) > 1 

Prueba esto:

 SELECT filename,Dates,Status FROM TableName WHERE Dates In (SELECT MAX(Dates) FROM TableName GROUP BY filename)