如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建与 Redshift 的实时 Excel 连接

如何在没有连接的情况下为 postgres (Redshift) 生成 SQL 查询?

Redshift:如何将连接表的副本复制到集群中的每个切片上?

Python 中的 Redshift 连接单元测试

如何在我的 redshift / SQL Workbench 连接中找到 AUTOCOMMIT 的当前值?

如何使用 Tableau 桌面软件连接到 AWS RedShift?