[英]Select TOP 2 values for each group
我遇到的问题是每组只获得TOP 2值(组在列中)。
示例:
ID Group Value
1 A 30
2 A 150
3 A 40
4 A 70
5 B 0
6 B 100
7 B 90
我希望我的输出是
ID Group Value
1 A 150
2 A 70
3 B 100
4 B 90
简单地说,对于每个组,我只想要2行具有最高值
大多数数据库都支持ANSI标准row_number()
函数。 你会用它作为:
select group, value
from (select t.*,
row_number() over (partition by group order by value desc) as seqnum
from t
) t
where seqnum <= 2;
要设置id
,可以在外部查询中使用row_number()
:
select row_number() over (order by group, value) as id,
group, value
from (select t.*,
row_number() over (partition by group order by value desc) as seqnum
from t
) t
where seqnum <= 2;
但是,更改id
似乎是可疑的。
您可以使用具有等级函数ROW_NUMBER()
CTE
。
这是获取结果的查询。
;WITH cte AS
( SELECT Group, value,
ROW_NUMBER() OVER (PARTITION BY Group ORDER BY value DESC) AS rn
FROM test
)
SELECT Group, value FROM cte
WHERE rn <= 2
ORDER BY value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.