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

SQL查询需求:筛选仅单个检查类型为incomplete的应用

解决方案

核心思路

要筛选出仅1种检查类型状态为incomplete,其余所有检查均为complete的application,关键是统计每个application下:

  • incomplete状态的检查数量恰好为1
  • 所有非incomplete的检查状态都是complete(若业务存在其他状态,需额外排除)

方法一:分组聚合(GROUP BY + HAVING)

假设你的表名为inspections,包含字段application_id(对应application标识,如2024-1)、inspection_type、status,可以用以下SQL:

SELECT application_id
FROM inspections
GROUP BY application_id
HAVING 
  -- 统计incomplete的检查数恰好为1
  SUM(CASE WHEN status = 'incomplete' THEN 1 ELSE 0 END) = 1
  -- 确保没有除complete/incomplete外的其他异常状态(业务仅存两种状态时可省略)
  AND SUM(CASE WHEN status NOT IN ('complete', 'incomplete') THEN 1 ELSE 0 END) = 0
  -- 验证总检查数 = complete数量 + 1(即仅1条incomplete记录)
  AND COUNT(*) = SUM(CASE WHEN status = 'complete' THEN 1 ELSE 0 END) + 1;

方法二:窗口函数(WITH子句)

如果需要同时查看对应incomplete的检查类型,或更灵活扩展逻辑,可用窗口函数实现:

WITH app_inspection_stats AS (
  SELECT 
    application_id,
    inspection_type,
    status,
    -- 统计当前application下的incomplete总数
    COUNT(CASE WHEN status = 'incomplete' THEN 1 END) OVER (PARTITION BY application_id) AS incomplete_count,
    -- 统计当前application下非complete的总数
    COUNT(CASE WHEN status != 'complete' THEN 1 END) OVER (PARTITION BY application_id) AS non_complete_count
  FROM inspections
)
-- 去重得到符合条件的application
SELECT DISTINCT application_id
FROM app_inspection_stats
-- 仅当incomplete数为1,且所有非complete记录都是这1条incomplete时符合条件
WHERE incomplete_count = 1 AND non_complete_count = 1;

示例验证

针对你提到的场景:

  • 2024-1:仅Final检查为incomplete,其余均为complete → 两种方法都会选中它
  • 2024-2:Final和Plumbing均为incomplete → incomplete_count=2,不符合条件,会被排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:13