生成具有日期和小时的时间序列,并在Amazon Redshift中创建表

时间:2018-09-23 23:31:26

标签: sql 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中将其创建到表中吗?谢谢。

2 个答案:

答案 0 :(得分:0)

这样的脚本可能会对您有所帮助,

CREATE or REPLACE function gen_ser() returns integer
as 
$body$
declare
query varchar;
i integer := 0;
begin
loop 
exit when i >= 100;
i:=i+10;
query :='Insert into table select ''01-01-2018''::timestamptz + '''|| i ||' hours'' ::interval;';
execute query;
end loop;
return 1;
end;
$body$
language plpgsql;

答案 1 :(得分:0)

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


适用于Postgres 8.4(无法检查8.0,但也可以正常工作)

demo: db<>fiddle

    export class Book{
    private name: string;

     constructor(name: string){
    this.name=name;
    }
getName(){
        return this.name;
    }
  1. <p>{{ book.getName() }}</p> 从1到10,并根据您的开始时间戳将结果加入。结果是一个包含两列的表:一个在每一行的开头,一个从1到10的数字。
  2. 现在您可以将生成的数字乘以间隔,并将其添加到开头。

编辑: The problem is discussed already