SQL-UDF实现:按30天周期判定序列中的索引事件日期
问题:基于30天间隔分组计算每个事件的INDEX_DATE
现有一张主体记录表,每个主体对应1条或多条EVENT_DATE记录,表结构及数据如下:
| SUBJECT | EVENT_DATE |
|---|---|
| 1 | 2020-01-01 |
| 1 | 2020-11-06 |
| 2 | 2021-09-24 |
| 2 | 2021-09-26 |
| 3 | 2022-04-01 |
| 4 | 2020-05-01 |
| 4 | 2021-05-25 |
| 4 | 2021-05-31 |
| 4 | 2022-11-30 |
| 4 | 2022-12-02 |
需求规则
针对每个主体的每一条事件,判定其30天周期内的首个事件(即INDEX_DATE),规则如下:
- 若主体仅有单个事件,或多个事件间隔超过30天,则该事件的INDEX_DATE为自身EVENT_DATE;
- 若存在2个及以上事件间隔在30天内,则该组事件的INDEX_DATE为序列中的首个事件日期;
- 事件的INDEX_DATE不得早于该事件30天以上。
主体4的预期结果
| SUBJECT | EVENT_DATE | INDEX_DATE |
|---|---|---|
| 4 | 2020-05-01 | 2020-05-01 |
| 4 | 2021-05-25 | 2021-05-25 |
| 4 | 2021-05-31 | 2021-05-25 |
| 4 | 2022-11-30 | 2022-11-30 |
| 4 | 2022-12-02 | 2022-11-30 |
现有尝试与诉求
我尝试通过构建事件链并使用lag()函数实现,但当事件数量超过2个时,需要对比更早的事件,因此寻求SQL-UDF的解决方案。
内容的提问来源于stack exchange,提问作者lmmjrf
相关产品推荐
相关产品推荐

