You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中计算credit limit与addl credit总和并延续累加值?

解决方案:实现带延续性的信用总额计算

原表格数据

账户编号信用额度额外信用
1231000500
1231000
1231000
4562000300
4562000
4562000200
4562000

期望结果

账户编号信用额度额外信用总信用额度
12310005001500
12310001500
12310001500
45620003002300
45620002300
45620002002200
45620002200

场景一:Excel中实现

假设数据从第2行开始(表头在第1行),在D2(总信用额度列)输入以下公式,下拉填充即可:

=IF(A2<>A1, B2+IF(C2<>"",C2,0), IF(C2<>"", B2+C2, D1))
  • 逻辑说明:
    1. 若当前行账户编号和上一行不同,重新计算总信用(信用额度+当前额外信用,无额外信用则加0)
    2. 若账户编号相同,优先用当前行的额外信用计算总额;无额外信用则沿用上行的总信用

场景二:SQL中实现(以MySQL为例)

方法1:使用窗口函数(MySQL 8.0+)

利用LAST_VALUE窗口函数获取当前账户分组内到当前行为止的最后一个非空额外信用,再和信用额度相加:

SELECT 
    account_no AS 账户编号,
    credit_limit AS 信用额度,
    addl_credit AS 额外信用,
    credit_limit + COALESCE(
        LAST_VALUE(CASE WHEN addl_credit IS NOT NULL THEN addl_credit END) 
        OVER (PARTITION BY account_no ORDER BY (SELECT NULL) ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW),
        0
    ) AS 总信用额度
FROM your_table;

方法2:使用变量(兼容旧版MySQL)

通过变量记录当前账户的有效额外信用值,逐行计算:

SET @prev_account = '', @current_addl = 0;
SELECT 
    account_no AS 账户编号,
    credit_limit AS 信用额度,
    addl_credit AS 额外信用,
    credit_limit + 
        CASE 
            WHEN account_no != @prev_account THEN @current_addl := COALESCE(addl_credit, 0)
            WHEN addl_credit IS NOT NULL THEN @current_addl := addl_credit
            ELSE @current_addl
        END AS 总信用额度
FROM your_table
ORDER BY account_no;

内容的提问来源于stack exchange,提问作者kalyan4uonly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:30