如何改写SQL语句实现跨多条记录计算余额?
实现累计余额计算的SQL修改方案
要计算每条记录的累计余额,核心是用窗口函数实现跨行的累计求和。按日期顺序对每行的Credit - Debit进行累计计算即可,具体修改如下:
修改后的SQL语句
SELECT FORMAT(Date,'yyyy/MM/dd') AS FormattedDate, Reference, Description, Debit, Credit, -- 计算累计余额:从第一条记录到当前行的(Credit - Debit)之和 SUM(Credit - Debit) OVER (ORDER BY Date) AS Balance FROM TABLE WHERE Id='ID' AND Date > '2022-01-01' ORDER BY Date;
关键说明
SUM() OVER (ORDER BY Date)窗口函数:按Date排序后,自动计算从第一条到当前行的Credit - Debit累计值,也就是当前行的实时余额。- 必须保留
ORDER BY Date:余额是按时间顺序累积的,确保记录按日期排序才能得到正确的余额结果。 - 若同一天存在多条记录,可在
ORDER BY中补充唯一标识字段(比如记录ID),避免排序混乱:SUM(Credit - Debit) OVER (ORDER BY Date, RecordId) AS Balance - 若需要纳入指定日期前的初始余额,可在累计值基础上直接加上初始余额:
(SELECT InitialBalance FROM Account WHERE Id='ID') + SUM(Credit - Debit) OVER (ORDER BY Date) AS Balance
内容的提问来源于stack exchange,提问作者Wragnam
相关产品推荐
相关产品推荐

