sql - 如何获取不包含在 group by (SQL Server) 中的列的值
问题描述
我有一个包含三列 ( Name, Value, Date
) 的表,我需要获取每个名称的最新值。
这是完整的表格:
Name | Value | Date
-------+-------+-----------
aaaaa | 1 | 01-01-2018
bbbbb | 2 | 02-01-2018
aaaaa | 2 | 03-01-2018
bbbbb | 1 | 04-01-2018
这是我需要的结果:
Name | Value | Date
-------+-------+-----------
aaaaa | 2 | 03-01-2018
bbbbb | 1 | 04-01-2018
我尝试了一些事情(分组,过度(分区),...),但我不知道该怎么做。
有人能帮我吗?
解决方案
使用窗口函数
select * from
(select *, row_number over(partition by name order by date desc) as rn
) t where rn=1
或共同相关的子查询
select * from t t1
where t.date in (select max(date) from t where t2.name=t1.name group by t2.name)
或者你可以使用
select TOP(1) with ties *
from t
order by (row_number() over(partition by name order by date DESC));
推荐阅读
- ios - RTCAudioSession 将 MicrophoneBuiltIn 显示为输入端口,尽管蓝牙设备已在 iOS 中连接
- python - 与存储在 Pandas 数据框中的点的 XY 位置相比,根据数组内的单元格位置 (XY) 对 numpy 数组应用计算
- instruments - 如何匹配自定义 Instruments 启动模式中的字符串?
- c++ - 遇到 MFC 序列化问题
- ios - 在 Swift 5 中,如何通过背景音频将音频控件添加到控制中心?
- python-3.x - 遍历数组并在对象内部搜索
- c - 无法理解程序的输出
- django - 如何在本地环境中运行没有媒体文件的 django 管理应用程序?
- python - 在我使用套接字模块后,python 将无法工作
- ios - 在 SwiftUi 中的视图之间传递列表