You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake:如何将日期区间行拆分为区间内每日单条记录?

在Snowflake中将日期区间拆分为每日一行的实现方案

在Snowflake中没有PostgreSQL的generate_series函数,但可以通过两种简洁的方式实现日期区间拆分为每日一行的需求,同时保留原行的price信息。

先准备测试数据

CREATE OR REPLACE TABLE test_dates (
    start_date DATE,
    end_date DATE,
    price INT
);

INSERT INTO test_dates VALUES ('2023-05-22', '2023-05-26', 5);

方案一:使用generator生成序列并计算日期

SELECT
    DATEADD(day, seq4(), t.start_date) AS date,
    t.price
FROM test_dates t,
     TABLE(generator(rowcount => (SELECT MAX(DATEDIFF(day, start_date, end_date) + 1) FROM test_dates)))
WHERE DATEADD(day, seq4(), t.start_date) <= t.end_date;
  • seq4()生成从0开始的整数序列
  • DATEDIFF(day, start_date, end_date) + 1计算区间总天数,取最大值作为generator的行数上限
  • 通过DATEADD逐天累加得到区间内的每个日期,并用WHERE过滤超出当前行end_date的无效日期

方案二:使用SEQUENCE+FLATTEN展开日期序列(推荐)

SELECT
    f.value AS date,
    t.price
FROM test_dates t,
     LATERAL FLATTEN(input => SEQUENCE(t.start_date, t.end_date, INTERVAL '1 day')) f;
  • SEQUENCE(t.start_date, t.end_date, INTERVAL '1 day')直接生成区间内的每日日期数组
  • LATERAL FLATTEN将数组中的每个日期拆分为单独一行,自动关联原行的price信息
  • 这种写法逻辑清晰,和PostgreSQL的generate_series用法最贴近

内容的提问来源于stack exchange,提问作者jyablonski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:27:47