如何在sql中使用唯一列名过滤结果时获取最新日期列记录?

问题描述 投票:0回答:3

我有如下表格:

enter image description here

我想写一个SQL查询来获取输出如下:

enter image description here

查询应该从表中选择所有记录,但是,当多个记录具有相同的Id列值时,它应该只有一个记录具有最新的Date。例如,这里Rudolf id 1211在输入中出现三次---在输出中仅选择一个具有日期06-12-2010的Rudolf记录。和詹姆斯一样。

我试着写一个查询,但没有成功。所以,请帮我在sql中形成一个查询字符串。

提前致谢

sql sql-server greatest-n-per-group
3个回答
1
投票

您可以通过Date Desc对数据进行分区,并获取每个分区的第一行

SELECT A.Id, A.Name, A.Place, A.Date FROM (
   SELECT 
     *,
     ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Date DESC) AS rn 
   FROM [Table]
) A WHERE A.rn = 1

1
投票

你可以使用WITH TIES

    select top 1 PERCENT WITH TIES * from t
    order by (row_number() over(partition by id order by date desc))

https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=280b7412b5c0c04c208f2914b44c7ce3


0
投票

正如我从您的示例中看到的,重复行仅在Date中有所不同。如果是一个案例,那么简单的GROUP BYMAX聚合函数将为你完成这项工作。

SELECT Id, Name, Place, MAX(Date) 
FROM [TABLE_NAME]
GROUP BY Id, Name, Place

这是一个有效的例子:http://sqlfiddle.com/#!18/7025e/2

© www.soinside.com 2019 - 2024. All rights reserved.