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

求助:如何在SQL中统计resuss行对应的前置NULL数据量

修正后的SQL语句及问题分析

原SQL返回全0的原因很明确:WHERE子句只筛选了flag = 'resuss'的行,这些行的flag字段不可能为NULL,因此sum(case when flag is null then 1 else 0 end)的计算结果必然是0。要实现需求,需要关联同一id的所有相关记录,同时处理两种场景:存在flag='resuss'的id、所有flag均为NULL的id。


修正后的SQL语句

-- 场景1:统计存在flag='resuss'的id,对应m+日期之前的flag为NULL的记录数
SELECT
    d.opendate,
    d.`m+`,
    d.id,
    COUNT(t.id) AS timeHibernate
FROM dataTable d
LEFT JOIN dataTable t
    ON d.id = t.id
    AND t.`m+` < d.`m+`
    AND t.flag IS NULL
WHERE d.flag = 'resuss'
GROUP BY d.opendate, d.`m+`, d.id

UNION ALL

-- 场景2:统计所有flag均为NULL的id的总记录数
SELECT
    MIN(opendate) AS opendate, -- 可根据需求调整为MAX或其他逻辑
    MIN(`m+`) AS `m+`, -- 可根据需求调整为MAX或其他逻辑
    id,
    COUNT(*) AS timeHibernate
FROM dataTable
WHERE id NOT IN (
    SELECT DISTINCT id FROM dataTable WHERE flag = 'resuss'
)
GROUP BY id

关键说明

  1. 场景1逻辑:通过自连接关联同一id的所有记录,筛选出m+日期早于当前resuss行m+且flag为NULL的记录,用COUNT统计有效数量。
  2. 场景2逻辑:先排除存在flag='resuss'的id,对剩余全NULL的id按id分组,统计该id的总记录数。其中opendate和m+取该id的最小值,可根据实际业务需求调整为最大值或其他规则。
  3. 语法细节:SQL标识符m+需要用反引号()包裹避免语法错误;字符串常量使用单引号更符合SQL标准;原SQL中的than是笔误,正确应为then`。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:12:41