当前:
[当RNK为1时,如所示合并ID,否则,如果RNK为0,则保持原样。
请帮助该怎么做。
必填:
这是一个孤岛问题。但是,您实际上只在rnk = 1
时才关心孤岛。因此,一种方便的计算方法是rnk = 0
的累加和。然后剩下的就是聚合并组合id:
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是db <>小提琴。
这是一个孤岛问题。您要将rnk
的值为1
的相邻行分组在一起。
这里是使用row_number()
和条件表达式的方法:
select
case when min(id) <> max(id) then concat(min(id), '-', max(id)) else min(id) end id,
min(rnk) rnk
from (
select
t.*,
row_number() over(order by id) rn1,
row_number() over(partition by rnk order by id) rn2
from mytable t
) t
group by case when rnk = 1 then rn1 - rn2 else rn1 + rn2 end
order by min(id)
id | nk:-------- | -:A100-A102 | 1个A103 | 0A104 | 0A105-A106 | 1个