Bạn muốn xác định các nhóm giá trị liền kề. Một phương pháp là sử dụng lag()
để tìm phần đầu của dãy, sau đó là tổng tích lũy để xác định các nhóm.
Một phương pháp khác là sự khác biệt của số hàng:
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;