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

Dha*_*ram 2 generate-series amazon-redshift postgresql-8.0

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

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

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

要么

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).

moe*_*tel 7

只要你的表有比所需系列有更多行的数字,这就是过去对我有用的东西:

select
    (row_number() over (order by 1)) - 1 as hour
from
    large_table
limit 24
;
Run Code Online (Sandbox Code Playgroud)

哪个返回数字0-23.

  • 这是一个不错的解决方案,如果我使用类似pg_catalog.pg_operator的东西,我不必担心架构更改会破坏查询. (2认同)

Pir*_*e X 5

Redshift 于 2021 年 4 月发布了递归。现在 Redshift 中可以实现递归。您可以使用以下代码生成一系列数字(甚至表格)

with recursive numbers(NUMBER) as
(
select 1 UNION ALL
select NUMBER + 1 from numbers where NUMBER < 28
)
Run Code Online (Sandbox Code Playgroud)