如何使用 Redshift 交叉连接 generate_series 和 table?
Posted
技术标签:
【中文标题】如何使用 Redshift 交叉连接 generate_series 和 table?【英文标题】:How to cross join generate_series and table with Redshift? 【发布时间】:2019-10-08 18:26:19 【问题描述】:我想用generate_series()
函数生成的一系列数据交叉连接一个表来生成36个月。
我不知道如何使用此配置进行交叉连接。
知道:
我无法创建新表来存储 generate_series() 的结果
使用 Redshift,我没有最新版本的 PostgreSQL,我不得不将我的 generated_series()
设为这样才能正常工作。
我试过这个没有成功。
WITH sales AS (
SELECT
department
,product
,count(*) as invoice
FROM table
WHERE product SIMILAR TO '%(Apple|Lemon|Salt)%'
AND department is not NULL
group by department , product order by department , product ASC
),
date_gen as( SELECT (date_trunc('month', CURRENT_DATE::TIMESTAMP)) - (i * interval '1 month') as date_datetime
FROM generate_series(1,36) i
)
SELECT * FROM date_gen
CROSS JOIN sales;
如果你有专业提示:)
【问题讨论】:
我过去的实验表明generate_series()
是在Leader节点上运行的,所以不能和表中的数据进行join。您可以使用generate_series()
创建日历表,该表可用于将来的日期连接,或者简单地使用电子表格生成信息并导出为 CSV 以填充日历表。
【参考方案1】:
您可以在内部表上使用ROW_NUMBER()
来模拟generate_series
。
date_gen AS (
SELECT DATE_ADD('month', - i.i, DATE_TRUNC('month', CURRENT_DATE)) AS mnth
FROM (
SELECT ROW_NUMBER() OVER() i
FROM stl_scan
LIMIT 36
) i
)
【讨论】:
谢谢它完美运行:) 真的很棒,我读过诸如行号如何提供帮助之类的东西。我要剖析这个函数。以上是关于如何使用 Redshift 交叉连接 generate_series 和 table?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有连接的情况下为 postgres (Redshift) 生成 SQL 查询?
Redshift:如何将连接表的副本复制到集群中的每个切片上?