2017-04-26 62 views
1

我有一个表包含具有datetime的特定用户的多个记录,我的要求是我只需要通过查询获得最新记录。我不知道如何获得这种类型的数据。从SQL Server中的表中获取最新记录

Create Table tblReport(
USERID LONG, ReportDateTime Datetime 
) 

当前记录

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 

所需的输出

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 

我的查询

select USERID,max(ReportDateTime) from tblReport group by USERID, ReportDateTime order by USERID 

回答

2

group by删除ReportDateTime

select 
    UserId 
    , ReportDateTime = max(ReportDateTime) 
from tblReport 
group by userid 
order by userid 

rextester演示:http://rextester.com/CLQ69624

回报:

+--------+-------------------------+ 
| 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 | 
+--------+-------------------------+ 
+0

最好使用更标准的“MAX(ReportDateTime)AS [ReportDateTime]“语法。但是否则,是的,就是这个。 – pmbAustin

+4

@pmbAustin定义更好吗?他们执行相同的操作。一个是ANSI标准,但我不知道这是否使它“更好”。 [坏习惯踢:使用AS而不是=列别名 - 亚伦伯特兰](http://sqlblog.com/blogs/aaron_bertrand/archive/2012/01/23/bad-habits-to-kick-using-as -instead-of-column-aliases.aspx) – SqlZim

+0

这太棒了,我怎么会错过? – Anjyr

1

另一种选择是使用与领带条款

Select Top 1 With Ties * 
From tblReport 
Order By Row_Number() over (Partition By UserID Order by ReportDateTime Desc) 
+0

谢谢你给我新东西 – Anjyr

+1

@Anjyr那么这是件好事。我每天在这个网站上学到新东西。这就是为什么我是一个巨大的粉丝。 –

相关问题