我需要为报告创建一个空的时间表系列,这样我就可以将几个表的连接活动留给它了。一天中的每个小时都不一定有数据,但我希望它显示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)。
答案 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()
用于表函数。解决方法似乎是创建一个数字表。
另见: