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

SQL查询:按指定过账日期统计各客户账户的费用与调整余额

问题根因
  • 原有SQL中LAG()窗口函数未按cl_id分区,会跨客户比较post_date,判断逻辑完全失效
  • 用窗口聚合+CASE判断的实现逻辑不符合需求,既无法实现同一cl_id+post_date下仅返回一行的效果,还会导致同一分组内多行返回重复的汇总值
  • 未添加指定post_date起始值到当前日期的筛选条件,会返回不符合时间范围的冗余数据
  • CASE分支中cl_bal_amt的ELSE返回值为vr.pt_bal_amt,和字段定义不符,属于笔误
修正后SQL
SELECT 
    p.orgz_cd,
    p.cl_id,
    MIN(p.svc_date) min_svc_date, -- 同一post_date下有多个svc_date时取最早,不需要可删除
    MAX(p.svc_date) max_svc_date, -- 同一post_date下有多个svc_date时取最晚,不需要可删除
    p.post_date,
    SUM(p.tot_pay_adj_amt) tot_pay_adj_amt,
    SUM(vr.cl_bal_amt) cl_bal_amt,
    SUM(vr.tot_bal_amt) tot_bal_amt
FROM mstr_trans_code AS p
LEFT JOIN mstr_client_code AS vr 
    ON vr.src_sys_id = p.src_sys_id 
    -- 若关联条件需绑定客户ID请补充下一行,根据实际业务规则调整
    -- AND vr.cl_id = p.cl_id
WHERE 
    p.post_date >= '替换为你指定的起始post日期' -- 替换为实际起始日期
    AND p.post_date <= CURRENT_DATE -- 到当前日期
    AND p.svc_date <= p.post_date -- 你原有逻辑中的服务日期早等于过账日期的条件
GROUP BY 
    p.orgz_cd,
    p.cl_id,
    p.post_date -- 按客户+过账日期分组,保证一组仅返回一行
ORDER BY 
    p.orgz_cd,
    p.cl_id,
    p.post_date DESC;
注意事项
  • 如果同一src_sys_id在mstr_client_code表中存在多行记录,需要先对该表按关联键聚合后再关联,避免关联后数据膨胀导致汇总值错误
  • 若你需要保留svc_date维度的拆分统计,可将svc_date添加到GROUP BY分组项中,输出会变为每个客户、每个过账日期、每个服务日期对应一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:36:05