如何筛选出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条件确保:- 该ID同时存在
condition1=1和condition2=1的记录(避免其中一个条件缺失的情况); condition1的首次出现时间确实早于condition2。
- 该ID同时存在
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

