AdvancedAdvanced PostgreSQL
Running balance (financial ledger query)
The query
SQL
SELECT
transaction_date,
description,
amount,
SUM(amount) OVER (
ORDER BY transaction_date, transaction_id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_balance,
COUNT(*) OVER (
ORDER BY transaction_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS transaction_number
FROM ledger
ORDER BY transaction_date, transaction_id;Note
“Running balance is a classic financial query. ROWS UNBOUNDED PRECEDING ensures cumulative sum from start.