我想在每个组中选择第二大的值,如何在sql中做到这一点?例如下表,
IDs value ID1 2 ID1 3 ID1 4 ID2 1 ID2 2 ID2 5
当按id分组时,我想要这个输出
IDs value ID1 3 ID2 2
谢谢。
iszxjhcz1#
使用 row_number() :
row_number()
select t.* from (select t.*, row_number() over (partition by id order by value desc) as seqnum from t ) t where seqnum = 2;
hgc7kmma2#
另一种方法-你可以使用稠密等级()。它将确保您的sql始终返回第二大值,即使您有两个值最大的记录。
select t.* from (select t.*, dense_rank() over (partition by id order by value desc) as rrank from t ) t where rrank = 2;
2条答案
按热度按时间iszxjhcz1#
使用
row_number()
:hgc7kmma2#
另一种方法-你可以使用稠密等级()。
它将确保您的sql始终返回第二大值,即使您有两个值最大的记录。