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

如何在SQL中筛选仅包含单一状态的Tracking ID?

筛选仅含单一状态的Tracking ID解决方案

要解决这个问题,核心是先识别出仅对应一种状态的Tracking ID,再提取这些ID的所有记录,而非直接通过WHERE子句过滤状态值。以下是两种适配500万行级大数据量的高效SQL实现方案:

方法1:分组筛选+关联原表

先通过分组统计每个Tracking ID的状态种类数,筛选出仅含单一状态的ID,再关联原表获取完整记录:

SELECT t.*
FROM your_table t
INNER JOIN (
    SELECT `Tracking ID`
    FROM your_table
    GROUP BY `Tracking ID`
    -- 统计每个ID的不同状态数量,仅保留数量为1的
    HAVING COUNT(DISTINCT `Status`) = 1
) AS valid_ids ON t.`Tracking ID` = valid_ids.`Tracking ID`;

方法2:窗口函数直接筛选(推荐大数据量场景)

如果你的数据库支持窗口函数(如MySQL 8+、PostgreSQL、SQL Server),可直接用窗口函数计算每个Tracking ID的状态种类数,再过滤结果,避免关联操作:

SELECT `Tracking ID`, `Product ID`, `Status` -- 替换为你需要的所有列
FROM (
    SELECT 
        *,
        -- 按Tracking ID分组,统计组内不同状态的数量
        COUNT(DISTINCT `Status`) OVER (PARTITION BY `Tracking ID`) AS status_count
    FROM your_table
) AS t
WHERE status_count = 1;

性能优化提示

  • 给Tracking ID和Status字段创建联合索引,能大幅提升分组/窗口函数的计算速度
  • 如果Status存在NULL值,需根据业务需求在子查询/窗口函数中添加WHERE Status IS NOT NULL,避免NULL被误判为一种状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:22:40