当前:
当 RNK 为 1 时,则如图所示合并 ID,否则如果 RNK 为 0,则保持原样。
请帮忙看看该怎么做。
必填:
最佳答案
这是一个间隙和岛屿问题。但是,当 rnk = 1
时,您实际上只关心岛屿。因此,计算它们的一种便捷方法是 rnk = 0 的累积和。然后剩下的就是聚合并组合 ids:
select (case when min(id) = max(id) then min(id)
else min(id) || '-' || max(id)
end) as id,
rnk
from (select t.*, sum(1 - rnk) over (order by id) as grp
from t
) t
group by grp, rnk
order by min(id);
Here是一个数据库<> fiddle 。
关于sql - 将行与排名合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61375332/