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

基于用户注册开始日期筛选注册漏斗数据的SQL实现需求

用CASE语句实现注册漏斗表的精准日期筛选

我懂你的痛点:普通WHERE子句直接过滤日期的话,会把那些注册开始日期早于2/1/2018、但后续行为在2月的用户也捞进来,而你真正要的是注册开始时间在2018年2月内的用户的所有行为数据对吧?

这里给你用CASE语句实现的查询写法,核心是先验证用户的Start日期是否在目标区间,再决定是否保留该用户的所有记录:

SELECT user_id, event, date
FROM your_registration_funnel_table
WHERE CASE
    -- 检查当前用户是否有Start事件落在目标日期区间
    WHEN EXISTS (
        SELECT 1
        FROM your_registration_funnel_table t2
        WHERE t2.user_id = your_registration_funnel_table.user_id
          AND t2.event = 'Start'
          AND t2.date BETWEEN '2/1/2018' AND '2/28/2018'
    ) THEN 1 -- 符合条件的用户返回1
    ELSE 0 -- 不符合的返回0
END = 1 -- 只保留返回1的记录

逻辑拆解

  • 对于每一条记录,我们通过EXISTS子查询去检查同一个用户是否存在一条event='Start'且日期在2018年2月的记录
  • CASE语句把这个检查结果转换成1或0,最后WHERE子句只保留等于1的记录,也就是那些注册开始时间在目标区间的用户的所有行为

当然,补充一个更简洁的替代写法(不用CASE但逻辑一致):

SELECT user_id, event, date
FROM your_registration_funnel_table
WHERE user_id IN (
    SELECT user_id
    FROM your_registration_funnel_table
    WHERE event = 'Start'
      AND date BETWEEN '2/1/2018' AND '2/28/2018'
)

不过既然你明确要求用CASE语句,前面的版本就完全符合需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:28