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

时间:2011-08-26 20:36:21

标签: 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

预期结果

ID  Size    Item
1   10  b
2   11  e
3   2   f

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

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

select id, size, item
from test
where size = (select max(size) from test t2 where id = test.id)

有什么建议吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

WITH    T AS ( SELECT   * ,
                        ROW_NUMBER() OVER ( PARTITION BY ID 
                                                ORDER BY Size DESC ) AS RN
               FROM     YourTable
             )
    SELECT  ID ,
            Size ,
            Item
    FROM    T
    WHERE   RN = 1

答案 2 :(得分:0)

SELECT id, item, MAX(size)
FROM Test
GROUP BY id, item

假设item的每次出现id都相同。

答案 3 :(得分:0)

select id, max(size), item
from test
group by id, item

编辑:啊,你刚添加的数据会改变这一点,我的上述查询不再适用。

答案 4 :(得分:0)

你可以使用这个查询(我的意思是你的查询),但是有必要创建复合索引(id,size)