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

如何筛选出condition1先于condition2出现的唯一ID?

解决方案

要筛选出满足「condition1=1的出现时间早于condition2=1的出现时间」的唯一ID列表,你可以基于已掌握的MIN(date)分组统计方法,通过条件聚合来分别获取每个ID下两个条件的最早触发时间,再进行比较筛选。

方法一:子查询+条件聚合

SELECT id
FROM (
    SELECT 
        id,
        -- 获取当前ID下condition1=1的最早日期
        MIN(CASE WHEN condition1 = 1 THEN date END) AS cond1_first_date,
        -- 获取当前ID下condition2=1的最早日期
        MIN(CASE WHEN condition2 = 1 THEN date END) AS cond2_first_date
    FROM TABLE
    GROUP BY id
) AS date_summary
-- 过滤:确保两个条件都存在,且condition1的最早时间更早
WHERE cond1_first_date IS NOT NULL 
  AND cond2_first_date IS NOT NULL 
  AND cond1_first_date < cond2_first_date;

方法二:双子查询关联

如果你更习惯拆分逻辑,也可以分别统计两个条件的最早时间,再通过ID关联筛选:

SELECT c1.id
FROM (
    SELECT id, MIN(date) AS cond1_first_date
    FROM TABLE
    WHERE condition1 = 1
    GROUP BY id
) AS c1
INNER JOIN (
    SELECT id, MIN(date) AS cond2_first_date
    FROM TABLE
    WHERE condition2 = 1
    GROUP BY id
) AS c2 ON c1.id = c2.id
WHERE c1.cond1_first_date < c2.cond2_first_date;

关键逻辑说明

  • 两种方法的核心都是分别获取每个ID下两个条件的最早触发时间,这是对你已掌握的GROUP BY id + MIN(date)的扩展:
    • 方法一中用CASE WHEN在同一分组查询里,只对符合条件的日期取最小值;
    • 方法二中拆分两个子查询,分别筛选对应条件后取最早日期,再通过ID关联。
  • 最终的WHERE条件确保:
    1. 该ID同时存在condition1=1和condition2=1的记录(避免其中一个条件缺失的情况);
    2. condition1的首次出现时间确实早于condition2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:55:15