首页 > 解决方案 > 显示最新不同数据的 SQL Server 查询

问题描述

我正在尝试构建一个 SQL 查询来仅恢复表中最年轻的记录(它已经有一个 Timestamp 列),其中我要过滤的项目出现多次,如我的表示例所示:

表格示例.

基本上,我有一个table1带有 Id、Millis、fkName 和 Price 的,以及一个table2带有 Id 和名称的。

table1中,具有相同 fkName 的项目可以出现多次。

我需要实现的是建立一个查询,我可以在其中列出每个 fkName 的最后一条记录,以便我可以获得每个项目的最实际价格。

到目前为止我尝试过的是一个查询

SELECT DISTINCT [table1].[Millis], [table2].[Name], [table1].[Price]
FROM [table1]
JOIN [table2] ON [table2].[Id] = [table1].[fkName]
ORDER BY [table2].[Name]

但我没有得到正确的列表。

对此有何建议?提前致谢,

标签: sqlsql-servertsqljoingreatest-n-per-group

解决方案


解决这个每组最大 n 问题的一种简单且可移植的方法是使用子查询进行过滤:

select t1.millis, t2.name, t1.price
from table1 t1
inner join table2 t2 on t2.id = t1.fkName
where t1.millis = (select max(t11.millis) from table1 t11 where t11.fkName = t1.fkName)
order by t1.millis desc

推荐阅读