Искате да идентифицирате групи от съседни стойности. Един от методите е да използвате lag()
за намиране на началото на поредицата, след това кумулативна сума за идентифициране на групите.
Друг метод е разликата в номера на реда:
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;