sql - 显示最新不同数据的 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]
但我没有得到正确的列表。
对此有何建议?提前致谢,
解决方案
解决这个每组最大 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
推荐阅读
- c - 链接器如何在 C 中解析多重定义的全局符号
- javascript - 一页上的几个幻灯片
- java - 在构造函数中为静态成员变量赋值会导致任何问题吗?(JAVA)
- javascript - 如何使用 Javascript 在 Gutenberg 中禁用默认标题栏
- c - 尝试使用c程序将文件中的所有数字(不是特定数字)替换为星号?
- javascript - 测试:角度中的 spyOn Helper 类
- regex - bash 正则表达式中的可选字符
- sql-server-2008 - 加入 2 个表以了解客户已打开的未处理事件数
- python - 重塑数据框和聚合值
- c++ - 在 Android Studio 中调试 C++ 时“启动 LLDB 服务器”