我正在尝试为具有许多连接的大型数据集编写查询,并且在没有某种子查询的情况下无法完成特定的部分,我试图避免这种情况。
对于具有列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)
有什么建议吗?
答案 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)