BigQuery如何用CASE WHEN判断同字段中'Resurrected'晚于'Churned'状态
BigQuery 按分组判断复活时间晚于流失时间的SQL实现
实现逻辑
无需使用LEAD窗口函数逐行比对,直接通过分组聚合做极值比对即可,效率更高逻辑更清晰:
- 按
group_id分组 - 分别聚合得到分组内最大的流失(
Churned)月份、最大的复活(Resurrected)月份 - 比对两个极值:只要最大复活月份大于最大流失月份,返回
TRUE;其他情况(包括两种类型记录任意一种不存在)返回FALSE
参考SQL
SELECT group_id, -- 比对两个极值,无对应类型记录时补FALSE COALESCE( MAX(CASE WHEN movement_type = 'Resurrected' THEN month_key END) > MAX(CASE WHEN movement_type = 'Churned' THEN month_key END), FALSE ) AS condition FROM -- 替换为你的实际表名 `your_project.your_dataset.your_table` GROUP BY group_id
逻辑说明
如果某个group_id下没有Churned记录、或者没有Resurrected记录,对应MAX聚合的结果为NULL,NULL做比较运算的结果也为NULL,通过COALESCE函数可以将这类场景的结果统一修正为FALSE,完全匹配需求。
内容的提问来源于stack exchange,提问作者Iren Ramadhan
相关产品推荐
相关产品推荐

