首页 > 解决方案 > 如何获取不包含在 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

我尝试了一些事情(分组,过度(分区),...),但我不知道该怎么做。

有人能帮我吗?

标签: sqlsql-serverdatabase

解决方案


使用窗口函数

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));

推荐阅读