sql >> Base de Datos >  >> RDS >> Oracle

Consulta Oracle sql para agrupar registros consecutivos por fecha

Asumiendo que podemos usar start_date para identificar los registros adyacentes (es decir, no hay espacios), entonces puede usar el enfoque de diferencia de números de fila:

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 cómo funciona esto, mire los resultados de la subconsulta. Debería poder "ver" cómo la diferencia de los dos números de fila define los grupos de registros adyacentes con la misma tasa.