首页 > 解决方案 > 基于多列从每个组中获取具有最大值的行

问题描述

假设我有下表 STUDENTMARKS:

桌子

在此处输入图像描述

其中 Name+Age+ID 一起代表一个人。我想得到每个学生在最短的时间内获得最高分的行。首先我们将优先考虑分数,如果任何学生的分数相同,那么我们将采取最短的时间,我们可以说时间将是唯一的。基本上我想要以下输出:

输出

在此处输入图像描述

我尝试了以下 sql 但它不起作用:

SELECT TOP 1 * FROM STUDENTMARKS GROUP BY Name, Age, ID ORDER BY Score DESC, Time ASC

有什么建议吗?

标签: sqlsql-serverdatabasegroup-by

解决方案


您可以使用row_number()

select * from
(
select *,row_number() over(partition by name, age, id order by score desc, time asc) as rn
from STUDENTMARKS
)A where rn=1

推荐阅读