Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Consulta Oracle sql para agrupar registros consecutivos por data


Assumindo que podemos usar apenas start_date para identificar os registros adjacentes (ou seja, não há lacunas), você pode usar a abordagem de diferença de números de linha:
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;

Para ver como isso funciona, observe os resultados da subconsulta. Você deve ser capaz de "ver" como a diferença dos números de duas linhas define os grupos de registros adjacentes com a mesma taxa.