创build一个SQL查询来检索最近的logging

我正在为我的项目组创build一个状态板模块。 状态板允许用户将他们的状态设置为或不在状态,并且还可以提供注释。 我打算把所有的信息存储在一个表格中,数据的例子如下:

Date User Status Notes ------------------------------------------------------- 1/8/2009 12:00pm B.Sisko In Out to lunch 1/8/2009 8:00am B.Sisko In 1/7/2009 5:00pm B.Sisko In 1/7/2009 8:00am B.Sisko In 1/7/2009 8:00am K.Janeway In 1/5/2009 8:00am K.Janeway In 1/1/2009 8:00am J.Picard Out Vacation 

我想查询数据并返回每个用户的最新状态,在这种情况下,我的查询将返回以下结果:

 Date User Status Notes ------------------------------------------------------- 1/8/2009 12:00pm B.Sisko In Out to lunch 1/7/2009 8:00am K.Janeway In 1/1/2009 8:00am J.Picard Out Vacation 

我试图找出TRANSACT-SQL来做到这一点? 任何帮助,将不胜感激。

子查询派生表中聚合,然后join到它。

  Select Date, User, Status, Notes from [SOMETABLE] inner join ( Select max(Date) as LatestDate, [User] from [SOMETABLE] Group by User ) SubMax on [SOMETABLE].Date = SubMax.LatestDate and [SOMETABLE].User = SubMax.User 

换一种方法,如果你使用子查询,这将只扫描一次而不是两次

只有sql server 2005和up

 select Date, User, Status, Notes from ( select m.*, row_number() over (partition by user order by Date desc) as rn from [SOMETABLE] m ) m2 where m2.rn = 1; 

派生表可以工作,但是如果这是SQL 2005,则CTE和ROW_NUMBER可能更清晰:

 WITH UserStatus (User, Date, Status, Notes, Ord) as ( SELECT Date, User, Status, Notes, ROW_NUMBER() OVER (PARTITION BY User ORDER BY Date DESC) FROM [SOMETABLE] ) SELECT User, Date, Status, Notes from UserStatus where Ord = 1 

这也将有助于显示来自每个用户的最新x状态。

另一个简单的方法

 SELECT Date, User, Status, Notes FROM Test_Most_Recent WHERE Date in ( SELECT MAX(Date) from Test_Most_Recent group by User)