Sie möchten Gruppen benachbarter Werte identifizieren. Eine Methode ist die Verwendung von lag()
um den Anfang der Sequenz zu finden, dann eine kumulative Summe, um die Gruppen zu identifizieren.
Eine andere Methode ist die Differenz der Zeilennummer:
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;