【问题标题】:How to cross join generate_series and table with Redshift?如何使用 Redshift 交叉连接 generate_series 和 table?
【发布时间】: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 以填充日历表。

标签: amazon-web-services amazon-redshift cross-join


【解决方案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
)

【讨论】:

  • 谢谢它完美运行:) 真的很棒,我读过诸如行号如何提供帮助之类的东西。我要剖析这个函数。
猜你喜欢
  • 2020-07-11
  • 2022-01-14
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多