我有如下表格:
我想写一个SQL查询来获取输出如下:
查询应该从表中选择所有记录,但是,当多个记录具有相同的Id列值时,它应该只有一个记录具有最新的Date。例如,这里Rudolf id 1211在输入中出现三次---在输出中仅选择一个具有日期06-12-2010的Rudolf记录。和詹姆斯一样。
我试着写一个查询,但没有成功。所以,请帮我在sql中形成一个查询字符串。
提前致谢
您可以通过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
你可以使用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
正如我从您的示例中看到的,重复行仅在Date中有所不同。如果是一个案例,那么简单的GROUP BY
与MAX
聚合函数将为你完成这项工作。
SELECT Id, Name, Place, MAX(Date)
FROM [TABLE_NAME]
GROUP BY Id, Name, Place
这是一个有效的例子:http://sqlfiddle.com/#!18/7025e/2