在 Amazon Redshift 中以每月增量展开 table
Explode a table with a monthly increment in Amazon Redshift
我有样品table:
id
start_dt
end_dt
100
06/07/2021
30/09/2021
我想获得以下输出
id
start_dt
end_dt
100
06/07/2021
31/07/2021
100
01/08/2021
30/08/2021
100
01/09/2021
30/09/2021
我已经尝试在 Amazon Redshift 中使用 GENERATE_SERIES(),但是没有给出所需的结果。
现有 table 相当大,所以我可以使用临时 tables,然后在稍后阶段加入另一个 table。
我浏览了其他帖子,但其他提议的解决方案并未完全提供所需的结果/在 Amazon Redshift 上根本不起作用。任何解决此问题的帮助将不胜感激。
传统方法是:
- 创建一个
Calendar
table 每月包含一行,start_date 和 end_date 列
- 将您的 table 加入
Calendar
table,其中 table.start_dt <= calendar.end_dt AND table.end_dt >= calendar.start_dt
- 这两列是:
GREATEST(table.start_dt, calendar.start_dt)
LEAST(table.end_dt, calendar.end_dt)
我有样品table:
id | start_dt | end_dt |
---|---|---|
100 | 06/07/2021 | 30/09/2021 |
我想获得以下输出
id | start_dt | end_dt |
---|---|---|
100 | 06/07/2021 | 31/07/2021 |
100 | 01/08/2021 | 30/08/2021 |
100 | 01/09/2021 | 30/09/2021 |
我已经尝试在 Amazon Redshift 中使用 GENERATE_SERIES(),但是没有给出所需的结果。
现有 table 相当大,所以我可以使用临时 tables,然后在稍后阶段加入另一个 table。
我浏览了其他帖子,但其他提议的解决方案并未完全提供所需的结果/在 Amazon Redshift 上根本不起作用。任何解决此问题的帮助将不胜感激。
传统方法是:
- 创建一个
Calendar
table 每月包含一行,start_date 和 end_date 列 - 将您的 table 加入
Calendar
table,其中table.start_dt <= calendar.end_dt AND table.end_dt >= calendar.start_dt
- 这两列是:
GREATEST(table.start_dt, calendar.start_dt)
LEAST(table.end_dt, calendar.end_dt)