我需要您帮我进行一个用于余额计算的sql查询。 请检查我的下表。 “开放”仅用于首次计算。
非常感谢
这是我的桌子
trx_no Opening debit credit
ab123 200 0 100
ab456 200 0 50
ab789 200 0 50
cd123 200 50 0
cd456 200 0 10
cd789 200 0 40
这是预期的结果
trx_no Opening debit credit balance
ab123 200 0 100 300
ab456 200 0 50 350
ab789 200 0 50 400
cd123 200 50 0 350
cd456 200 0 10 360
cd789 200 0 40 400
答案 0 :(得分:2)
假设您的trx_no
列总是 为5个字符的固定宽度,并且字典排序表明了交易的期限,那么我们可以在此处尝试使用相关子查询来找到滚动余额:
SELECT
trx_no,
Opening,
debit,
credit,
Opening + (SELECT SUM(t2.credit - t2.debit)
FROM yourTable t2
WHERE t2.trx_no <= t1.trx_no) AS balance
FROM yourTable t1
ORDER BY
trx_no;
如果您使用的是MySQL 8+,则窗口函数会使此操作变得不那么冗长:
SELECT
trx_no,
Opening,
debit,
credit,
Opening +
SUM(credit - debit) OVER (OVER ORDER BY trx_no) AS balance
FROM yourTable t1
ORDER BY
trx_no;
答案 1 :(得分:0)
还有一个问题,该查询如何通过单个查询获得最后的余额? 谢谢
trx_no Opening debit credit balance lastbalance
ab123 200 0 100 300 400
ab456 200 0 50 350 400
ab789 200 0 50 400 400
cd123 200 50 0 350 400
cd456 200 0 10 360 400
cd789 200 0 40 400 400
编辑: 我使用此查询,但得到的结果正确,但是不确定该查询是否正确(好):
SELECT trx_no,期初,借方,贷方,期初+(在您的表t2中选择SELECT SUM(t2.credit-t2.debit)WHERE t2.trx_no <= t1.trx_no)AS余额,期初+(SELECT SUM(credit-从yourTable借记))从yourTable借记余额t1 ORDER BY trx_no;