如何使用 Redshift 交叉连接 generate_series 和 table?
How to cross join generate_series and table with Redshift?
我想将 table 与 generate_series()
函数生成的一系列数据交叉连接以生成 36 个月。
我不知道如何创建适用于此配置的交叉联接。
知道:
我无法创建新的 table 来存储 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;
如果您有专业提示:)
您可以在内部 table 上使用 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
)
我想将 table 与 generate_series()
函数生成的一系列数据交叉连接以生成 36 个月。
我不知道如何创建适用于此配置的交叉联接。
知道:
我无法创建新的 table 来存储 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;
如果您有专业提示:)
您可以在内部 table 上使用 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
)