REDSHIFT:如何在不创建名为"数字"的表的情况下生成一系列数字。在redshift(Postgres 8.0.2)?

时间:2016-07-29 20:46:45

标签: amazon-redshift generate-series postgresql-8.0

我需要为报告创建一个空的时间表系列,这样我就可以将几个表的连接活动留给它了。一天中的每个小时都不一定有数据,但我希望它显示null或零表示不活动,而不是省略当天的那个小时。

在Postgres的后续版本(后8.0.2版)中,这在以下几个方面很容易:

SELECT unnest(array[0,1,2,3,4...]) as numbers

OR

CROSS JOIN (select generate_series as hours from generate_series(now()::timestamp, now()::timestamp + interval '1 day', '1 hour'::interval )) date_series

Redshift可以运行其中一些命令,但是当您尝试与任何表一起运行它时会引发错误。

我需要什么:

生成一系列数字(例如0-23)作为子查询的可靠方法,它将在redshift上运行(使用postgres 8.0.2)。

3 个答案:

答案 0 :(得分:7)

只要你的表格中包含的行数多于所需系列的数字,这就是过去对我有用的内容:

select
    (row_number() over (order by 1)) - 1 as hour
from
    large_table
limit 24
;

返回数字0-23

答案 1 :(得分:1)

我不是查询系统表只是为了得到行号列表的忠实粉丝。如果它像一天中的小时一样不断变化,那么我会选择普通的if (li1 && li1) { }

UNION ALL

然后将WITH hours_in_day AS ( SELECT 0 AS hour UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 ... UNION ALL SELECT 23 ) 加入到您想要的任何内容中。

答案 2 :(得分:0)

不幸的是,Amazon Redshift不允许将generate_series()用于表函数。解决方法似乎是创建一个数字表。

另见: