Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Erhalten Sie Intervalle mit unveränderlichem Wert aus einer Folge von Zahlen

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;