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

Trino:动态生成日期列表以填充数据表缺失日期

在Trino中动态生成日期列表补全缺失日期

在Trino里可以直接用内置的sequence()函数动态生成日期序列,不需要预先创建日期表,完美适配你补全缺失日期的需求。

方法1:基于原表日期范围动态生成

如果要覆盖原表的全部时间区间(从原表最小日期到最大日期),可以直接从原表获取边界值生成序列:

WITH date_series AS (
    SELECT date_col
    FROM UNNEST(
        sequence(
            (SELECT MIN(date_col) FROM orig_table),
            (SELECT MAX(date_col) FROM orig_table),
            INTERVAL '1' DAY
        )
    ) AS t(date_col)
)
SELECT ds.date_col
     , ot.*
FROM date_series AS ds
LEFT JOIN orig_table AS ot
  ON ot.date_col = ds.date_col

关键逻辑说明:

  • sequence(start_date, end_date, step):生成从起始到结束日期、步长为指定间隔的序列,这里步长设为1天
  • UNNEST():把sequence生成的日期数组拆分成一行行的独立日期记录
  • 用CTE(WITH子句)封装日期序列,让整体逻辑更清晰

方法2:生成固定范围的日期序列

如果需要生成固定时间段的日期(比如最近90天、某一整年),可以直接指定起止日期:

WITH date_series AS (
    SELECT date_col
    FROM UNNEST(
        sequence(
            DATE '2024-01-01',
            CURRENT_DATE,
            INTERVAL '1' DAY
        )
    ) AS t(date_col)
)
SELECT ds.date_col
     , ot.*
FROM date_series AS ds
LEFT JOIN orig_table AS ot
  ON ot.date_col = ds.date_col

注意事项

  • 确保原表的date_col是DATE类型,如果是TIMESTAMP,需要用DATE(ot.date_col)转换后再关联
  • 如果原表为空,MIN(date_col)和MAX(date_col)会返回null,此时可以用COALESCE指定默认起止日期:
    sequence(
        COALESCE((SELECT MIN(date_col) FROM orig_table), DATE '2024-01-01'),
        COALESCE((SELECT MAX(date_col) FROM orig_table), CURRENT_DATE),
        INTERVAL '1' DAY
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:05:11