J'ai une table qui contient plusieurs loggings d'un user particulier avec datetime, mon exigence est que je n'ai besoin que du dernier logging par requête. Je ne sais pas comment get ce type de données.
Table
Create Table tblReport( USERID LONG, ReportDateTime Datetime )
Enregistrements actuels
USERID ReportDateTime 1 2017-04-18 21:41:33.903 4 2017-04-20 01:16:00.653 4 2017-04-26 20:00:20.497 71 2017-04-17 22:31:37.437 4 2017-04-26 20:01:20.933 225 2017-04-20 00:58:10.253 225 2017-04-25 23:09:34.433 1 2017-04-18 23:35:00.567
Sortie désirée
USERID ReportDateTime 1 2017-04-18 23:35:00.567 4 2017-04-26 20:01:20.933 71 2017-04-17 22:31:37.437 225 2017-04-25 23:09:34.433
Ma requête
select USERID,max(ReportDateTime) from tblReport group by USERID, ReportDateTime order by USERID
Supprimez ReportDateTime
de votre group by
.
select UserId , ReportDateTime = max(ReportDateTime) from tblReport group by userid order by userid
rextester demo: http://rextester.com/CLQ69624
résultats:
+--------+-------------------------+ | UserId | ReportDateTime | +--------+-------------------------+ | 1 | 2017-04-18 23:35:00.567 | | 4 | 2017-04-26 20:01:20.933 | | 71 | 2017-04-17 22:31:37.437 | | 225 | 2017-04-25 23:09:34.433 | +--------+-------------------------+
Une autre option consiste à utiliser la clause With Ties
Select Top 1 With Ties * From tblReport Order By Row_Number() over (Partition By UserID Order by ReportDateTime Desc)