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

stampa la data di inizio e di fine in una riga per intervalli di date continui o sovrapposti in Oracle SQL

Esiste una soluzione elegante (ed efficiente) che utilizza match_recognize clausola (che richiede Oracle 12.1 o versioni successive).

select po, startdate, enddate
from   orders
match_recognize (
  partition by po
  order     by startdate
  measures  first(startdate) as startdate, max(enddate) as enddate
  pattern   ( c* n )
  define    c as max(enddate) + 1 >= next(startdate)  
);