SQL查询,用于从期初计算当前余额

时间:2019-09-25 09:50:34

标签: mysql sql

我需要您帮我进行一个用于余额计算的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

2 个答案:

答案 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;