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

imprimer la date de début et de fin sur une ligne pour les plages de dates continues ou qui se chevauchent dans Oracle SQL

Il existe une solution élégante (et efficace) utilisant le match_recognize clause (qui nécessite Oracle 12.1 ou supérieur).

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)  
);