Du vill identifiera grupper av angränsande värden. En metod är att använda lag()
för att hitta början av sekvensen, sedan en kumulativ summa för att identifiera grupperna.
En annan metod är skillnaden mellan radnummer:
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;