А так-то все просто, без всяких хитростей:
with t as (select 100 A, 30 B from dual union all
select 100, 20 from dual union all
select 100, 40 from dual union all
select 100, 10 from dual union all
select 100, 5 from dual)
--
select t.*,
a - nvl(sum(b) over(order by rownum
rows between unbounded preceding
and 1 preceding),0) as x
from t