如何找到具有组最大值的记录?

Dan*_*rts 3 sql sql-server

我正在尝试为一个包含许多连接的大型数据集编写查询,并且在没有某种子查询的情况下无法完成特定的部分,我试图避免这种情况.

对于具有列ID,大小,项的示例表,可能存在具有相同ID的多个记录.我想返回每个ID最大的记录.

ID  Size    Item
1   5   a
1   10  b
2   3   c
2   6   d
2   11  e
3   2   f
Run Code Online (Sandbox Code Playgroud)

预期结果

ID  Size    Item
1   10  b
2   11  e
3   2   f
Run Code Online (Sandbox Code Playgroud)

我尝试过各种各样的小组并且没有成功的方法.

使用子查询我可以这样做,但对于大型数据集,我宁愿不这样做

select id, size, item
from test
where size = (select max(size) from test t2 where id = test.id)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

bea*_*ach 5

这应该满足您的要求: 对于每个id,只返回最大的行

SELECT test.id, test.size, test.item
FROM test
INNER JOIN (
    SELECT id, MAX(size) AS size
    FROM test
    GROUP BY id
) max_size ON max_size.id = test.id AND max_size.size = test.size
Run Code Online (Sandbox Code Playgroud)