如何从现有记录生成补充时序记录?Teradata求简洁实现方案
Teradata下扩展客户活跃月份的简洁实现方案
需求明确:CUSTEVENTS表记录了客户的活跃月份,需要把每个活跃月扩展为当月及之后连续两个月的记录——比如客户72378的原始活跃记录是2022-10-31、2022-11-30,最终要生成包含这两个日期,再加上2022-12-31、2023-01-31的结果集。
用Teradata专属的EXPAND ON语法就能实现最简洁的处理,比时间参照表、UNION子查询高效得多,具体SQL如下:
假设表结构为cust_id INT, active_date DATE(active_date为每月最后一天):
SELECT DISTINCT ce.cust_id, ADD_MONTHS(ce.active_date, n) AS extended_active_date FROM CUSTEVENTS ce EXPAND ON GENERATE_SERIES(0, 2) AS n ORDER BY cust_id, extended_active_date;
关键逻辑说明
GENERATE_SERIES(0,2)直接生成0、1、2三个整数偏移量,分别对应活跃当月、次月、隔月ADD_MONTHS函数会自动适配月末日期的天数差异,比如从2022-10-31加1个月得到2022-11-30,加2个月得到2022-12-31,无需手动处理日期边界DISTINCT用来去重,避免不同原始活跃月扩展后产生重复日期(比如2022-10和2022-11的扩展结果都会包含2022-12-31,去重后只保留一条)
如果你的active_date不是月末日期,而是任意活跃日期,只需先转成当月月末再处理:
SELECT DISTINCT ce.cust_id, ADD_MONTHS(LAST_DAY(ce.active_date), n) AS extended_active_date FROM CUSTEVENTS ce EXPAND ON GENERATE_SERIES(0, 2) AS n ORDER BY cust_id, extended_active_date;
内容的提问来源于stack exchange,提问作者Tripp Knightly
相关产品推荐
相关产品推荐

