仅从SQL Server中的表中获取最新记录

仅从SQL Server中的表中获取最新记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表,其中包含一个特定用户的多条datetime记录,我的要求是通过查询只需要最新的记录。我不知道如何获取这种类型的数据 表格 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

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

表格

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

从您的
分组中删除
ReportDateTime

select 
    UserId
  , ReportDateTime = max(ReportDateTime)
from tblReport
group by userid
order by userid
rextester演示:

返回:

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

另一个选项是使用With Ties子句

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

最好使用更标准的“MAX(ReportDateTime)作为[ReportDateTime]”语法。但除此之外,是的,确实如此。@pmbAustin定义得更好?它们的性能相同。一个是ANSI标准,但我不知道这是否会让它“更好”。有些东西怎么可能或多或少是标准的呢?它要么是标准,要么不是标准。我更喜欢使用=,因为我可以把列名放在左边,它们很容易被发现,而且有时很长的计算结果可能会丢失在右边,如果我需要查看它们是如何计算的,只需要再次访问它们。两者实际上都不正确或不正确。根据Aaron写得很好的文章,我也更喜欢#2,因为对我来说它更容易阅读。@pmbAustin我不是说你的观点是错误的,我只是想指出这是你的观点,我不会说比我的观点更好。我只是不同意你对哪个更具可读性的评价。因为这两种方式都不会对性能产生影响,所以我更喜欢编写易于阅读的代码,因为我希望您编写易于阅读的代码。@pmbAustin更易于阅读?作为开发人员,我们处理对象和抽象。本例中的对象是ReportDateTime,而不是我们是如何到达那里的。我觉得阅读代码只是为了发现这不是我要找的那一行,这是一件令人不快的事。@Anjyr那么这不是一件好事。我每天都在这个网站上学到新东西。这就是为什么我是一个超级粉丝。