Вот на скорую руку, потестируйте:
SQL> with t0 as (select trunc(sysdate)+1/24 interval_begin, trunc(sysdate)+2/24 interval_end
from dual union all
select trunc(sysdate)+5/24 interval_begin, trunc(sysdate)+14/24 interval_end
from dual union all
select trunc(sysdate)+10/24 interval_begin, trunc(sysdate)+15/24 interval_end
from dual union all
select trunc(sysdate)+13/24 interval_begin, trunc(sysdate)+17/24 interval_end
from dual union all
select trunc(sysdate)+20/24 interval_begin, trunc(sysdate)+21/24 interval_end
from dual)
--------------------------< Cut here >-----------------------------------
select 24*sum(max(interval_end)-min(interval_begin)) total from (
select t.*, sum(sog) over(order by interval_begin) gr# from(
select t.*, case when interval_begin > max(interval_end)
over(order by interval_begin
rows between unbounded preceding and 1 preceding
)
then 1 else 0 end sog
from t0 t) t ) t group by gr#;
TOTAL
----------
14
SQL>