MySQL账本式数据库按acc_id动态计算用户余额问题求助
解决MySQL账本式数据库用户余额跨累加问题
问题根源:你的查询中窗口函数未按acc_id分区,导致所有用户的交易金额被统一累计,而非每个用户独立计算余额。
修正后的SQL查询代码:
SELECT acc_id, trans_date, credit, debit, SUM(credit - debit) OVER (PARTITION BY acc_id ORDER BY trans_date) AS balance FROM transactions ORDER BY trans_date;
关键修正点说明:
PARTITION BY acc_id:将交易数据按用户账户ID分组,确保每个用户的余额计算完全独立ORDER BY trans_date:按交易发生时间排序,保证余额按交易时序正确累加SUM(credit - debit):计算每笔交易的净金额变动,累计后得到当前时刻的用户余额
修正后效果:每个用户的余额从0开始,按自身交易记录独立累加,VA473的余额保持原有正确计算,新用户的第1笔交易余额为100,第2笔为250,完全符合需求。
内容的提问来源于stack exchange,提问作者Dwaipayan Chakroborty
相关产品推荐
相关产品推荐

