首页 > 解决方案 > 生成带有日期和小时的时间序列并在 Amazon Redshift 中创建表

问题描述

我想在 Amazon Redshift 中生成日期和小时表。以下查询适用于 Postgresql 9.1 及更高版本,但不幸的是,我们仅限于 Amazon Redshift,这会导致错误:“函数 generate_series 不存在”。非常感谢您在 8.02 中生成时间序列(如结果表)的帮助。

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, 
                          '2008-03-04 12:00', '10 hours');
  generate_series   

generate_series   
    ---------------------
     2008-03-01 00:00:00
     2008-03-01 10:00:00
     2008-03-01 20:00:00
     2008-03-02 06:00:00
     2008-03-02 16:00:00
     2008-03-03 02:00:00
     2008-03-03 12:00:00
     2008-03-03 22:00:00
     2008-03-04 08:00:00

编辑:我能够使用以下代码生成我想要的时间序列,但无法将它们创建到 Redshift 中的表中。错误信息是:

“Redshift 表不支持指定的类型或函数(每条 INFO 消息一个)。”

SELECT '2017-01-01 00:00:00'::timestamp + x * interval'1 hour' AS Date_Time
FROM generate_series(0, 1000 * 24) AS g(x)

任何想法如何将其创建到 Redshift 中的表中?谢谢。

标签: sqlamazon-redshift

解决方案


免责声明:请不要再使用此版本!


适用于 Postgres 8.4(无法检查 8.0,但应该也可以)

演示:db<>fiddle

SELECT start_date + gs * interval '10 hours'
FROM (
    SELECT '2008-03-01 00:00:00'::timestamp as start_date, generate_series(1,10, 1) as gs
) s
  1. generate_series从 1 到 10 并根据您的起始时间戳加入结果。结果是一个包含两列的表格:一列从每一行开始,一列包含从 1 到 10 的数字。
  2. 现在您可以将生成的数字乘以您的间隔并将其添加到开头。

编辑: 这个问题已经讨论过了


推荐阅读