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
相关产品推荐
相关产品推荐

