Snowflake中基于起止日期范围生成每日记录的SQL实现咨询
Snowflake生成日期范围内每日记录的SQL补充方案
以下是针对需求的完整SQL补充内容,核心是通过关联会员信息与日期表,筛选出指定日期范围内的所有日期并生成对应记录:
WITH CTEDATA ( select '123' as MemberID, -- 转换为日期类型避免格式匹配问题 TO_DATE('01/01/2024', 'MM/DD/YYYY') as start_date, TO_DATE('01/05/2024', 'MM/DD/YYYY') as end_date ), CTEDATE as ( select DT.DATE, CD.MemberID, CD.start_date, CD.end_date from DATETABLE DT -- 关联会员信息表,让每个日期匹配到会员数据 CROSS JOIN CTEDATA CD -- 筛选出落在起止日期范围内的日期 WHERE DT.DATE BETWEEN CD.start_date AND CD.end_date ) -- 可选择插入新表或直接查询结果 SELECT * FROM CTEDATE;
关键补充说明:
- SELECT段:新增
CD.MemberID, CD.start_date, CD.end_date,带出会员及日期范围信息 - FROM段:通过
CROSS JOIN关联CTEDATA与DATETABLE,确保每个日期都能关联到会员数据 - WHERE条件:用
BETWEEN筛选起止日期之间的所有日期,只保留目标范围内的记录
执行后将得到预期结果:
| DATE | MEMBER_ID | StartDate | EndDate |
|---|---|---|---|
| 2024-01-01 | 123 | 2024-01-01 | 2024-01-05 |
| 2024-01-02 | 123 | 2024-01-01 | 2024-01-05 |
| 2024-01-03 | 123 | 2024-01-01 | 2024-01-05 |
| 2024-01-04 | 123 | 2024-01-01 | 2024-01-05 |
| 2024-01-05 | 123 | 2024-01-01 | 2024-01-05 |
注:建议将字符串格式的日期转换为DATE类型(如示例中的
TO_DATE函数),避免因格式不匹配导致筛选错误。
内容的提问来源于stack exchange,提问作者JuniorFlip
相关产品推荐
相关产品推荐

