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

imprimir data de início e término em uma linha para intervalos de datas contínuos ou sobrepostos no Oracle SQL


Existe uma solução elegante (e eficiente) usando o match_recognize cláusula (que requer Oracle 12.1 ou superior).
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)  
);