add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.

CREATE TABLE table_name
(ID int, start_Date date, end_Date date)
;

INSERT INTO table_name
select 001, TO_DATE('2005-01-01','YYYY-MM-DD'), TO_DATE('2006-01-01','YYYY-MM-DD') from dual
union all select 001, TO_DATE('2005-01-01','YYYY-MM-DD'), TO_DATE('2007-01-01','YYYY-MM-DD') from dual
union all select 001, TO_DATE('2008-01-01','YYYY-MM-DD'), TO_DATE('2008-06-01','YYYY-MM-DD') from dual
union all select 001, TO_DATE('2008-04-01','YYYY-MM-DD'), TO_DATE('2008-12-01','YYYY-MM-DD') from dual
union all select 001, TO_DATE('2010-01-01','YYYY-MM-DD'), TO_DATE('2010-05-01','YYYY-MM-DD') from dual
union all select 001, TO_DATE('2010-04-01','YYYY-MM-DD'), TO_DATE('2010-12-01','YYYY-MM-DD') from dual
union all select 001, TO_DATE('2010-11-01','YYYY-MM-DD'), TO_DATE('2012-01-01','YYYY-MM-DD') from dual
;

7 rows affected
with u as
(select ID, start_date, end_date,
case
when start_date <= lag(end_date) over(partition by ID order by start_date, end_date) then 0
else 1 end as grp
from table_name),
v as
(select ID, start_date, end_date,
sum(grp) over(partition by ID order by start_date, end_date) as island
from u)
select ID, min(start_date) as start_Date, max(end_date) as end_date
from v
group by ID, island;
ID START_DATE END_DATE
1 01-JAN-05 01-JAN-07
1 01-JAN-08 01-DEC-08
1 01-JAN-10 01-JAN-12