with tab1 as ( select 10 dt from dual union all select 11 dt from dual union all select 14 dt from dual union all select 17 dt from dual ) , tab2 as ( select case when t1.dt > 18 then 0 else least(least(nvl(lead(t1.dt) over(order by t1.dt), 18), 18) - t1.dt, 2) end tt from tab1 t1 ) select sum(t1.tt) from tab2 t1
select 10 dt from dual union all
select 11 dt from dual union all
select 14 dt from dual union all
select 17 dt from dual
)
, tab2 as (
select case when t1.dt > 18 then 0 else
least(least(nvl(lead(t1.dt) over(order by t1.dt), 18), 18) - t1.dt, 2)
end tt
from tab1 t1
)
select sum(t1.tt) from tab2 t1