Условие:
WHERE t2.trx_no <= t1.trx_no
не работает в вашем случае. Вам нужны строки, упорядоченные по trx_date
, затем сначала по кредитам, затем по дебетам и, наконец, по trx_no
. Этот код будет использовать объединенный столбец (с объединением) этих 3 условий:
SELECT
t1.trx_no,
t1.trx_date,
t1.Opening,
t1.debit,
t1.credit,
t1.Opening + (
SELECT SUM(t2.credit - t2.debit)
FROM MyTable t2
WHERE
concat(t2.trx_date, t2.debit > t2.credit, lpad(t2.trx_no, 10, '0')) <=
concat(t1.trx_date, t1.debit > t1.credit, lpad(t1.trx_no, 10, '0'))
) AS balance
FROM MyTable t1
ORDER BY concat(t1.trx_date, t1.debit > t1.credit, lpad(t1.trx_no, 10, '0'))
См. demo . Результаты:
| trx_no | trx_date | Opening | debit | credit | balance |
| ------ | ---------- | ------- | ----- | ------ | ------- |
| 1 | 2019-10-01 | 200 | 0 | 100 | 300 |
| 2 | 2019-10-02 | 200 | 0 | 100 | 400 |
| 5 | 2019-10-03 | 200 | 0 | 200 | 600 |
| 3 | 2019-10-03 | 200 | 100 | 0 | 500 |
| 4 | 2019-10-03 | 200 | 400 | 0 | 100 |
| 6 | 2019-10-04 | 200 | 0 | 100 | 200 |
| 7 | 2019-10-05 | 200 | 0 | 400 | 600 |