print start and end date in one row for continous or overlaping date ranges in oracle SQL

前端 未结 2 599
逝去的感伤
逝去的感伤 2021-01-22 17:13

I would like to print in one row start date and end date for continous or overlaping date ranges.

here is the data

create table orders (
po varchar2(6),
st         


        
2条回答
  •  一向
    一向 (楼主)
    2021-01-22 17:48

    There is an elegant (and efficient) solution using the match_recognize clause (which requires Oracle 12.1 or higher).

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

提交回复
热议问题