首页 > 解决方案 > 一次将多个未来日期添加到 redshift SQL

问题描述

现在我有一个表格,详细信息如下:

Date    Campaign      Visits   Orders    Revenue
....     ....         ....     ....       ....
Jun-18   Promotion01   10        1        120

假设它称为表 A 现在由于报告的目的,我想添加新的日期,如下所示

Date    Campaign      Visits   Orders    Revenue
Jul-18     NULL         0       0         0
Aug-18     NULL         0       0         0
Sep-18     NULL         0       0         0
....       ....         ....     ....       ....
Dec-18     NULL         0       0         0 

我想使用联合仅添加日期数据。
我使用以下命令在 Amazon redshift 中尝试了 dateadd 函数

SELECT 
    to_char(dateadd(month, 18, '01-01-2017'),'yyyy-MM') as plus30,
    NULL,
    0,
    0,
    0

它返回日期,但它只返回 1 行,即

Date    Campaign      Visits   Orders    Revenue
Jul-18     NULL         0       0         0

如果我想像之前显示的那样返回多行,除了 1 接 1 加入,那我该怎么办?非常感谢您的帮助!

标签: sqlamazon-web-servicesunionamazon-redshift

解决方案


坦率地说,完成这类任务的最简单方法是制作 Excel 电子表格,填写所有所需的值,将其保存为 CSV,然后使用 COPY 将其加载到 Redshift。这为您提供了一个很好的界面来创建数据,而无需使用 SQL。

您只得到一行的原因是 SELECT 通常处理数据表,每行输入数据返回一个结果。您尚未指定表,因此它只返回一行。

幸运的是,您可以generate_series()在某些情况下使用模拟数据:

SELECT 
    to_char(date '01-01-2017' + counter * interval '1 month','yyyy-MM') as plus30,
    NULL,
    0,
    0,
    0
FROM generate_series(1, 12) as counter

这会产生:

2017-02 (null)  0   0   0
2017-03 (null)  0   0   0
2017-04 (null)  0   0   0
2017-05 (null)  0   0   0
2017-06 (null)  0   0   0
2017-07 (null)  0   0   0
2017-08 (null)  0   0   0
2017-09 (null)  0   0   0
2017-10 (null)  0   0   0
2017-11 (null)  0   0   0
2017-12 (null)  0   0   0
2018-01 (null)  0   0   0

(您的问题显示yyyy-MM在 SQL 中,但Mon-YY在输出中,因此请进行相应调整。通常最好使用它,yyyy-MM因为它很容易作为数字和字符串排序。)


推荐阅读