我希望在一行中打印开始日期和结束日期,以表示连续或重叠的日期范围。
这里是数据。
预期输出为
有没有其他解决方案?
这里是数据。
create table orders (
po varchar2(6),
startdate date,
enddate date
);
insert into orders values ('order1',to_date('01-01-2020','dd-MM-yyyy'),to_date('31-01-2020','dd-MM-yyyy'));
insert into orders values ('order1',to_date('01-02-2020','dd-MM-yyyy'),to_date('31-03-2020','dd-MM-yyyy'));
insert into orders values ('order1',to_date('01-04-2020','dd-MM-yyyy'),to_date('30-06-2020','dd-MM-yyyy'));
insert into orders values ('order2',to_date('01-01-2020','dd-MM-yyyy'),to_date('31-01-2020','dd-MM-yyyy'));
insert into orders values ('order2',to_date('01-03-2020','dd-MM-yyyy'),to_date('31-03-2020','dd-MM-yyyy'));
insert into orders values ('order3',to_date('01-01-2020','dd-MM-yyyy'),to_date('31-01-2020','dd-MM-yyyy'));
insert into orders values ('order3',to_date('02-02-2020','dd-MM-yyyy'),to_date('31-05-2020','dd-MM-yyyy'));
insert into orders values ('order3',to_date('01-05-2020','dd-MM-yyyy'),to_date('31-07-2020','dd-MM-yyyy'));
预期输出为
order1 01-01-2020 30-06-2020
order2 01-01-2020 31-01-2020
order2 01-03-2020 31-03-2020
order3 01-01-2020 31-01-2020
order3 02-02-2020 31-07-2020
一开始我尝试使用unpivot子句将所有日期放在一列中,并检查前后行是否重叠或连续,然后消除这些行,但是这种方法不起作用,因为如果存在重叠,则日期的顺序将不再是开始日期后跟结束日期。
这不适合作为起点。
select * from(
select * from (
select po,startdate,enddate from orders)
unpivot(column_val for column_name in (startdate,enddate)) )order by po,column_val
有没有其他解决方案?