Redshift中高效聚合布尔值生成deleted列的技术问询
解决方案:Redshift中高效生成全局deleted标识(无需GROUP BY/CTE)
直接上可行的高效实现代码:
SELECT id, is_deleted, date, FIRST_VALUE(is_deleted) OVER ( PARTITION BY id ORDER BY CASE WHEN is_deleted THEN 0 ELSE 1 END ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS deleted FROM your_large_table;
方案细节说明:
- 排序逻辑:通过
ORDER BY CASE WHEN is_deleted THEN 0 ELSE 1 END,把每个id组内is_deleted = True的行排在最前面,确保FIRST_VALUE能优先抓取到该组是否存在True的结果。 - 窗口范围:
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING指定窗口覆盖当前id的所有行,保证该id下的每一行都能获取到统一的判断结果。 - 性能优势:全程基于布尔值直接处理,无需将布尔类型转换为整数,也避免了GROUP BY或CTE关联带来的额外性能损耗,完美适配大表的计算需求。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

