具有日期序列的交叉连接红移 [英] Cross join Redshift with sequence of dates
本文介绍了具有日期序列的交叉连接红移的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用红移来跟踪雅典娜查询,但到目前为止还不可能重现它。查询应该在CREATE TABLE AS ()
语句中调用,因此GENERATE_SEQUENCE()思想可能不起作用。有什么想法吗?
雅典娜查询:
SELECT
*
FROM table_one t1
CROSS JOIN UNNEST(slice(sequence(t1.effective_date, t1.expiration_date, INTERVAL '1' MONTH), 1 ,12)) AS t (sequence_date)
根据要求,我添加了一个示例来说明我正在尝试做什么。基本上我有一个有效期间隔的记录(年份单位1、2、3.)我想将其复制N次,以便将每个新记录指定为日期YYYY-MM-DD+INTERVAL*12/N个月(请参见示例)
原始记录:
日期 | 变量 |
---|---|
2021-05-06 | 值 |
目标(N=12,间隔1年)
日期 | 变量 |
---|---|
2021-05-06 | 值/12 |
2021-06-06 | 值/12 |
2021-07-06 | 值/12 |
2021-08-06 | 值/12 |
2021-08-06 | 值/12 |
2021-10-06 | 值/12 |
2021-11-06 | 值/12 |
2021-12-06 | 值/12 |
2022-01-06 | 值/12 |
2022-02-06 | 值/12 |
2022-03-06 | 值/12 |
2022-04-06 | 值/12 |
目标(N=4,间隔两年)
日期 | 变量 |
---|---|
2021-05-06 | 值/2 |
2021-11-06 | 值/2 |
2022-05-06 | 值/2 |
2022-11-06 | 值/2 |
感谢您的帮助
推荐答案
可能最好的方法是使用草书cte-https://docs.aws.amazon.com/redshift/latest/dg/r_WITH_clause.html
示例-Generate rows with incrementing dates based on just a starting date in Redshift
您似乎正在做的事情比本例稍微复杂一些。如果您无法获得它,请发布一些示例数据,这里的专家可以使用它们为您创建示例查询。
=
使用新信息和上面的递归CTE过程,我得出了以下结论:
drop table if exists table_one ;
create table table_one (
dt date,
info varchar(32),
n int,
y int);
insert into table_one values ('2021-05-06', 'record info here', 12, 1);
commit;
with recursive dates(dt, info, n, y, end_dt) as
( select dt::date, info, n, y, dateadd(year, y, dt)::date as end_dt
from table_one
union all
select dateadd(months, 12 * y / n, dt)::date as dt, info, n, y, end_dt::date
from dates d
where d.dt < dateadd(month, -12 * y /n, end_dt)
)
select dt, info from dates;
我不确定您是否希望以这种方式将N和Year添加到该过程中,但希望您可以从此处进行修改。只需更改TABLE_ONE INSERT语句中的N和Year的值,然后重新运行整个过程即可获得第二个结果。
这篇关于具有日期序列的交叉连接红移的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文