隣接する値のグループを識別したい。 1つの方法は、lag()
を使用することです。 シーケンスの開始を検索し、次に累積合計を使用してグループを識別します。
もう1つの方法は、行番号の違いです。
select value, min(id) as from_id, max(id) as to_id
from (select t.*,
(row_number() over (order by id) -
row_number() over (partition by val order by id
) as grp
from table t
) t
group by grp, value;