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

如何编写SQL查询获取满足组及条目状态要求的Entry_Number?

解决方案

要满足你提出的三个查询条件,核心是先锁定所有条目状态均为A/R且对应Group_Status为False的组,再从这些组中筛选出状态为A/R的Entry_Number。以下是几种可行的SQL写法:

方法1:使用NOT EXISTS子查询排除无效组

这种写法通过子查询检查当前组是否存在状态非A/R的条目,直接过滤掉不符合条件的组:

SELECT e.Entry_Number
FROM Table_E e
JOIN Table_G g ON e.Group = g.Group_Number
WHERE 
    e.Entry_Status IN ('A', 'R')
    AND g.Group_Status = FALSE
    AND NOT EXISTS (
        SELECT 1
        FROM Table_E e2
        WHERE e2.Group = e.Group
        AND e2.Entry_Status NOT IN ('A', 'R')
    );

逻辑说明

  • NOT EXISTS子查询确保当前组内没有任何条目状态为C或I,满足“同组所有条目状态均为A/R”的要求;
  • 同时结合了条目自身状态校验和组状态为False的条件,一步到位筛选目标数据。

方法2:用CTE预筛选有效组

先通过分组聚合筛选出符合条件的组,再关联原表获取目标条目,逻辑更清晰:

WITH Valid_Groups AS (
    SELECT Group
    FROM Table_E
    GROUP BY Group
    -- 统计组内状态非A/R的条目数,等于0表示所有条目都符合要求
    HAVING COUNT(CASE WHEN Entry_Status NOT IN ('A', 'R') THEN 1 END) = 0
)
SELECT e.Entry_Number
FROM Table_E e
JOIN Table_G g ON e.Group = g.Group_Number
JOIN Valid_Groups vg ON e.Group = vg.Group
WHERE 
    e.Entry_Status IN ('A', 'R')
    AND g.Group_Status = FALSE;

逻辑说明

  • Valid_Groups CTE先筛选出所有条目状态均为A/R的组;
  • 后续通过JOIN关联,只保留这些组中状态为A/R且组状态为False的条目。

方法3:窗口函数统计无效条目数

利用窗口函数计算每个组内的无效条目数量,再过滤出无效数为0的记录:

SELECT Entry_Number
FROM (
    SELECT 
        e.Entry_Number,
        e.Entry_Status,
        g.Group_Status,
        -- 按组分区,统计组内状态非A/R的条目总数
        SUM(CASE WHEN e2.Entry_Status NOT IN ('A', 'R') THEN 1 ELSE 0 END) OVER (PARTITION BY e.Group) AS invalid_entry_count
    FROM Table_E e
    JOIN Table_G g ON e.Group = g.Group_Number
    JOIN Table_E e2 ON e.Group = e2.Group
) AS filtered_data
WHERE 
    Entry_Status IN ('A', 'R')
    AND Group_Status = FALSE
    AND invalid_entry_count = 0;

逻辑说明

  • 窗口函数OVER (PARTITION BY e.Group)实现按组统计无效条目数;
  • 外层查询只保留无效数为0、自身状态符合要求且组状态为False的Entry_Number。

以上三种写法都能满足你的需求,在示例数据中会返回[12,13,14]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:01:13