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

如何用SQL查询仅存在Inactive状态的唯一ProductID

筛选仅含Inactive状态的ProductID解决方案

嘿,这个需求我太懂了!咱们要找的是那些从头到尾只有Inactive状态的ProductID,只要某个ProductID出现过哪怕一次Active,都得把它排除掉。下面给你两种实用的SQL写法,都能得到你想要的结果:

方法一:用NOT EXISTS子查询

这种方法逻辑直观,先锁定Inactive的记录,再排除掉存在对应Active记录的ProductID:

SELECT DISTINCT ProductID, Status
FROM your_table t1
WHERE Status = 'Inactive'
AND NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.ProductID = t1.ProductID
    AND t2.Status = 'Active'
);

逻辑解释:

  1. 先从表中筛选出所有状态为Inactive的记录
  2. 通过NOT EXISTS子查询,检查当前ProductID有没有对应的Active状态记录
  3. 用DISTINCT去重,避免像ProductID 152478那样多条重复的Inactive记录出现在结果里

方法二:用GROUP BY + HAVING分组筛选

这种方法通过分组统计来直接定位符合条件的ProductID:

SELECT ProductID, 'Inactive' AS Status
FROM your_table
GROUP BY ProductID
HAVING COUNT(DISTINCT Status) = 1
AND MAX(Status) = 'Inactive';

逻辑解释:

  1. 按ProductID分组,把同一个ProductID的所有记录归为一组
  2. COUNT(DISTINCT Status) = 1确保这个组里只有一种状态
  3. MAX(Status) = 'Inactive'确保这唯一的状态就是Inactive
  4. 直接指定Status为'Inactive',因为我们已经确认该ProductID只有这个状态

原始数据表

+-----------+----------+
| ProductID | Status   |
+-----------+----------+
| 152141    | Active   |
| 152141    | Inactive |
| 157874    | Active   |
| 152478    | Inactive |
| 152478    | Inactive |
| 157875    | Active   |
| 157875    | Active   |
| 157875    | Inactive |
+-----------+----------+

执行后期望结果

+-----------+----------+
| ProductID | Status   |
+-----------+----------+
| 152478    | Inactive |
+-----------+----------+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:14:36