Это рекурсивный итог:
with recursive totals as (
select trx_id, opening, qty_plus, qty_minus, opening + qty_plus - qty_minus as closing
from the_table
where trx_id = 1
union all
select t2.trx_id, p.closing, t2.qty_plus, t2.qty_minus, p.closing + t2.qty_plus - t2.qty_minus
from the_table t2
join totals p on p.trx_id = t2.trx_id - 1
)
select *
from totals
order by trx_id;
Недостатком является условие соединения, которое не предполагает пробелов в trx_id
. Возможно, это возможно и с оконными функциями, но в настоящее время я не могу придумать, как это сделать.
Онлайн пример