Oracle
 sql >> Base de données >  >> RDS >> Oracle

Requête Oracle sql pour regrouper les enregistrements consécutifs par date

En supposant que nous pouvons simplement utiliser start_date pour identifier les enregistrements adjacents (c'est-à-dire qu'il n'y a pas d'espace), vous pouvez utiliser l'approche de la différence des numéros de ligne :

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;

Pour voir comment cela fonctionne, regardez les résultats de la sous-requête. Vous devriez pouvoir "voir" comment la différence entre les deux numéros de ligne définit les groupes d'enregistrements adjacents avec le même taux.