Для этой проблемы вы можете использовать рекурсивный запрос, аналогичный вашему решению MySQL:
-- Your sample data:
WITH test(tran_date, qty1, qty2) as
(SELECT '2019-01-01 10:00:00',1,0 from dual union all
select '2019-01-01 10:00:01',2,0 from dual union all
select '2019-01-01 10:00:03',0,1 from dual union all
select '2019-01-01 10:00:04',0,2 from dual union all
select '2019-01-01 10:00:05',1,0 from dual union all
select '2019-01-01 10:00:05',3,0 from dual union all
select '2019-01-01 10:00:06',0,4 from dual union all
select '2019-01-01 10:00:07',0,1 from dual)
-- Add an index to join actual with prevous row:
, rn(tran_date, qty1, qty2, rn) AS
(SELECT tran_date, qty1, qty2, ROWNUM rn FROM test ORDER BY tran_date)
-- Recursive query from here on:
, rec(tran_date, qty1, qty2, qty3, rn) AS
(SELECT tran_date, qty1, qty2, 0, rn FROM rn WHERE rn=1
UNION ALL
SELECT rn.tran_date, rn.qty1, rn.qty2
, CASE WHEN rn.qty1=0 THEN rec.qty3 + rn.qty2
WHEN rn.qty1<=rec.qty3 THEN rec.qty3 - rn.qty1
ELSE 0
END
, rn.rn
FROM rec
JOIN rn
ON rn.rn = rec.rn + 1)
SELECT tran_date, qty1, qty2, qty3 FROM rec