Oracle
 sql >> Database >  >> RDS >> Oracle

Query Oracle sql per raggruppare record consecutivi per data

Supponendo che possiamo semplicemente usare start_date per identificare i record adiacenti (ovvero, non ci sono spazi vuoti), puoi utilizzare l'approccio differenza dei numeri di riga:

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;

Per vedere come funziona, guarda i risultati della sottoquery. Dovresti essere in grado di "vedere" come la differenza dei due numeri di riga definisce i gruppi di record adiacenti con la stessa velocità.