如何生成累计余额?基于SQL实现应收余额计算
如何通过SQL计算累计应收余额并生成结果表
现有数据表包含Date、total_fee、paid_amount三个字段,数据如下。需要通过SQL新增due_amount字段,该字段为累计计算的应收余额,预期结果如下。
原始数据表
| Date | total_fee | paid_amount |
|---|---|---|
| 2024-06-03 22:03:46 | 4000 | 300 |
| 2024-06-03 09:14:08 | 4000 | 1600 |
| 2024-06-03 09:13:12 | 4000 | 800 |
| 2024-06-03 09:08:33 | 4000 | 800 |
预期结果表
| Date | total_fee | paid_amount | due_amount |
|---|---|---|---|
| 2024-06-03 22:03:46 | 4000 | 300 | 3700 |
| 2024-06-03 09:14:08 | 4000 | 1600 | 2100 |
| 2024-06-03 09:13:12 | 4000 | 800 | 1300 |
| 2024-06-03 09:08:33 | 4000 | 800 | 500 |
SQL实现
使用窗口函数SUM()结合ORDER BY按时间降序累计支付金额,再用订单总金额减去累计支付金额得到应收余额:
SELECT Date, total_fee, paid_amount, total_fee - SUM(paid_amount) OVER (ORDER BY Date DESC) AS due_amount FROM your_table_name;
逻辑说明
SUM(paid_amount) OVER (ORDER BY Date DESC):按时间从晚到早累计支付金额,每条记录的累计值包含当前记录及之后所有记录的支付金额之和;total_fee - 累计支付金额:得到该时间点支付后的剩余应收余额,与预期结果完全匹配。
内容的提问来源于stack exchange,提问作者Zakir Hossain
相关产品推荐
相关产品推荐

