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

如何获取客户总余额为0的所有日期?SQL技术问询

解决多客户总余额变为0的日期查询问题

需求分析

我们需要从存储多客户多账户每日余额的表中,找出每个客户所有账户总余额为0的日期(若需筛选“从非0转为0”的日期,可调整条件)。原SQL仅针对单个账户余额变0的场景,无法满足按客户汇总的需求。

解决方案

步骤1:按客户+日期汇总总余额

先对每个客户的每日所有账户余额求和,得到该客户当日的总余额。

步骤2:判断总余额变化状态(可选)

如果需要筛选“从非0状态转为0”的日期,使用LAG窗口函数获取该客户前一天的总余额,再对比当日和前日的总余额。

完整SQL代码

WITH customer_daily_total AS (
    -- 计算每个客户每日的总余额
    SELECT
        customer,
        date,
        SUM(balance) AS total_balance
    FROM your_table_name  -- 替换为实际表名
    GROUP BY customer, date
    ORDER BY customer, date
),
balance_change AS (
    -- 获取前一天的总余额,用于判断余额变化状态
    SELECT
        customer,
        date,
        total_balance,
        LAG(total_balance) OVER (PARTITION BY customer ORDER BY date) AS prev_total_balance
    FROM customer_daily_total
)
-- 筛选总余额为0的日期,若需仅保留"从非0转为0"的日期,添加AND prev_total_balance > 0
SELECT
    customer,
    date
FROM balance_change
WHERE total_balance = 0
-- AND prev_total_balance > 0;  -- 如需筛选首次变0/从非0转0的日期,取消注释该行
ORDER BY customer, date;

代码说明

  • customer_daily_total CTE:按客户和日期分组,汇总当日所有账户的余额总和,得到每个客户每天的总余额。
  • balance_change CTE:使用LAG函数按客户分区、日期排序,获取该客户前一天的总余额,用于判断余额变化状态。
  • 最终查询:筛选总余额为0的日期;如果只需要“从非0转为0”的日期,取消注释AND prev_total_balance > 0条件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:34:58