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

Oracle-SQL-Abfrage, um aufeinanderfolgende Datensätze nach Datum zu gruppieren

Angenommen, wir können einfach start_date verwenden Um die benachbarten Datensätze zu identifizieren (d. h. es gibt keine Lücken), können Sie den Ansatz der Differenz der Zeilennummern verwenden:

select id, min(start_date) as mn_date, max(end_date) as mx_date, rate
from (select t.*,
             row_number() over (partition by id order by start_date) as seqnum_i,
             row_number() over (partition by id, rate order by start_date) as seqnum_ir
      from t
     ) t
group by id (seqnum_i - seqnum_ir), rate;

Um zu sehen, wie das funktioniert, sehen Sie sich die Ergebnisse der Unterabfrage an. Sie sollten in der Lage sein zu "sehen", wie die Differenz der beiden Zeilennummern die Gruppen benachbarter Datensätze mit derselben Rate definiert.