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

如何统计同时包含SEND和REC状态的唯一ID数量

解决统计同时拥有SEND和REC状态的唯一ID问题

哈哈,你踩了个SQL里超常见的小坑——同一行的Status字段怎么可能同时等于SEND和REC呢?这就是你的查询返回结果不对的核心原因~

要统计同时存在SEND和REC状态的唯一ID,我们需要换个思路:从「ID的整体状态集合」来判断,而不是单条记录的状态。下面给你几种靠谱的解决方案:

方法1:分组统计状态种类数

先按ID分组,统计每个ID对应的不同状态数量,筛选出刚好有2种状态的ID(因为Status只有SEND和REC两个值),最后统计这些ID的总数:

SELECT COUNT(DISTINCT ID)
FROM (
    SELECT ID
    FROM Table
    WHERE Date BETWEEN '2022-01-19' AND '2022-01-19'
    GROUP BY ID
    HAVING COUNT(DISTINCT Status) = 2
) AS subquery;

方法2:用EXISTS子查询验证

先找到所有当天有SEND记录的ID,再检查这些ID在同一天是否存在对应的REC记录,符合条件的ID就会被统计:

SELECT COUNT(DISTINCT t1.ID)
FROM Table t1
WHERE t1.Date BETWEEN '2022-01-19' AND '2022-01-19'
  AND t1.Status = 'SEND'
  AND EXISTS (
      SELECT 1
      FROM Table t2
      WHERE t2.ID = t1.ID
        AND t2.Date BETWEEN '2022-01-19' AND '2022-01-19'
        AND t2.Status = 'REC'
  );

方法3:自连接关联SEND和REC记录

把同一ID的SEND记录和REC记录做连接,最后统计唯一的ID数:

SELECT COUNT(DISTINCT t1.ID)
FROM Table t1
JOIN Table t2 ON t1.ID = t2.ID
WHERE t1.Date BETWEEN '2022-01-19' AND '2022-01-19'
  AND t1.Status = 'SEND'
  AND t2.Date BETWEEN '2022-01-19' AND '2022-01-19'
  AND t2.Status = 'REC';

这三种方法都能得到你预期的结果2,你可以根据自己数据库的数据量和性能需求选择合适的方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:25:26