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

标签 sql sql-server

我的 SQL Server 表如下所示

 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

这也返回第一行。我想要 Msg for Max date for a Particular Id。

有什么建议吗

最佳答案

使用窗口函数

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

另一种方法是在子查询中找到每个Id的最大date,然后将结果join到主表.试试这个。

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] 

关于sql - 如何在Group By中获取不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27797124/

相关文章:

SQL Server 相当于 Oracle 的 NULLS FIRST?

sql - "Results to Text"选项中设置的 SQL Server 中的自定义分隔符不起作用

sql-server - 无法对数据库 "ABC"执行差异备份,因为当前数据库备份不存在

sql-server - 搭配哪个 Express 版本 : SQL Server 2005 or 2008 R2?

带有 WHERE 子句的 SQL INNER JOIN 到 LINQ 格式

php - 将 php 数组转换为 SQL 数组

mysql - MySQL 中何时使用单引号、双引号和反引号

c# - 如果太多用户使用 c# 使用 asp.net 在 sql 中访问该表,则更新表的最佳方法

php - 将 php 数组传递给 sql 查询

sql - 如何在 SQL Server 中获取 YY 格式的年份