为获取用户最新A/B/C事件行的SQL查询添加has_x标记列
修改后的SQL查询语句
假设你的基础查询是通过窗口函数获取用户最新的A/B/C事件行,以下是添加has_x标记列的完整查询:
WITH user_x_status AS ( -- 统计每个用户是否存在code为X的事件 SELECT user_id, CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS has_x FROM events WHERE code = 'X' GROUP BY user_id ), latest_abc_events AS ( -- 原逻辑:获取每位用户最新的A/B/C事件行 SELECT e.user_id, e.event_time, e.code, -- 保留你需要的其他字段 ROW_NUMBER() OVER (PARTITION BY e.user_id ORDER BY e.event_time DESC) AS rn FROM events e WHERE e.code IN ('A', 'B', 'C') ) SELECT l.user_id, l.event_time, l.code, -- 列出你需要的其他字段 COALESCE(u.has_x, 0) AS has_x FROM latest_abc_events l LEFT JOIN user_x_status u ON l.user_id = u.user_id WHERE l.rn = 1;
关键说明
user_x_status子查询:通过分组聚合生成用户的X事件标记,1表示存在X事件,0表示不存在。LEFT JOIN+COALESCE:确保没有X事件的用户也能被保留,将关联后的NULL值统一转为0。- 如果你的原查询用的是其他方式(比如通过
MAX(event_time)关联获取最新行),只需替换latest_abc_events部分的逻辑,再和user_x_status关联即可。
内容的提问来源于stack exchange,提问作者LeonLenin
相关产品推荐
相关产品推荐

