如何在Group By中获取不同的记录

How to get Distinct records in Group By

我的 SQL 服务器 table 如下所示

 Id     Date                Msg
 1    01-01-2015             A
 1    02-01-2015             B
 2    03-01-2015             C

我想写一个查询来得到如下结果

   Id          Date            Msg
    1           02-01-2015      B
    2           03-01-2015      C

我正在努力

 SELECT Id,Max(Date) , Msg
 Group By Id, Msg

这个returns我也是第一排。我想要 Msg for Max date for a Particular Id。

有什么建议请

使用Window Function

SELECT Id,
       Date,
       Msg
FROM   (SELECT *,
               Row_number()OVER (partition BY Id ORDER BY [Date] DESC ) rn
        FROM   tablename) a
WHERE  rn = 1 

另一种方法是在 subquery 中找到每个 Id 的最大值 date,然后 join 与主要 table 的结果。试试这个。

SELECT Id,
       Date,
       Msg
FROM   tablename a
       JOIN (SELECT Id,
                    Max([Date])[Date]
             FROM   tablename
             GROUP  BY Id) B
         ON a.Id = b.id
            AND a.[Date] = b.[Date] 

在 where 子句中获取最大日期行的简单方法

这是简单的示例查询;

SELECT * FROM   TABLE  T1  
WHERE  T1.TIME = (SELECT MAX(TIME) FROM TABLE  WHERE ID = T1.ID )