SQL查询实现:仅当表中所有行status为Good时检索记录
实现思路
- 先按
business_date、load_date这两个聚合维度对数据分组 - 用聚合函数判断分组内是否存在非
Good的状态,只有完全不存在非Good状态的分组才会返回记录
参考SQL
SELECT 'Good' AS Status, business_date, load_date FROM 替换为你的实际表名 -- 若需要限定查询的日期范围,可取消下方注释并修改对应参数 -- WHERE -- business_date >= '起始业务日期' -- AND business_date <= '结束业务日期' -- AND load_date >= '起始加载日期' -- AND load_date <= '结束加载日期' GROUP BY business_date, load_date HAVING COUNT(CASE WHEN status != 'Good' THEN 1 END) = 0;
逻辑说明
HAVING条件的计数逻辑会统计每个分组下状态不是Good的记录数:
- 如果计数为0,说明该分组下所有记录的状态都是
Good,就会返回你预期的结果行 - 如果计数大于0(比如存在
Inprogress的记录),该分组会被直接过滤,不会返回任何结果
你给出的示例数据中,2020-11-01、2020-12-01的分组存在状态为Inprogress的记录,执行上述SQL不会返回结果;如果把C类的状态修改为Good,就会返回你期望的那一行输出。
内容的提问来源于stack exchange,提问作者user17302221
相关产品推荐
相关产品推荐

