如何在Snowflake中生成指定起始月到当前月的完整月份范围
解决方案
问题根因
现有查询漏返回起始月份2017-09-01 00:00:00.000的核心原因是:DATEDIFF(month)返回的是两个月份之间的间隔数,若要同时包含起始月和当前月两个端点,生成的行数需要在间隔数基础上+1。
调整后完整代码
SET sbf_num_months_1 = (SELECT datediff(month, DATE_TRUNC('month', '2017-09-01'::date), DATE_TRUNC('month', CURRENT_DATE)) + 1); SELECT dateadd( month, '-' || (row_number() over (order by null) - 1), DATE_TRUNC('month', CURRENT_DATE) )::timestamp AS month FROM table (generator(rowcount => ($sbf_num_months_1))) ORDER BY month ASC;
调整说明
- 计算总月数时+1,确保生成的行数刚好覆盖从起始月到当前月的所有月份
- 基准日期直接取当前月月初,去掉原来多余的
dateadd(month,1)逻辑 - 偏移量改为
row_number()-1,保证第一个返回值为当前月月初,最后一个返回值为指定的起始月月初 - 新增
ORDER BY month ASC,返回结果默认按时间正序排列,符合常规使用习惯
内容的提问来源于stack exchange,提问作者kimi
相关产品推荐
相关产品推荐

