Добавьте несколько будущих дат одновременно в красное смещение SQL - PullRequest
0 голосов
/ 25 июня 2018

Теперь у меня есть таблица, которая выглядит следующим образом:

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 

Я хотел бы использовать объединение для добавления только данных даты.
Я попытался использовать функцию dateadd в Amazon redshift с помощью следующей команды

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, что мне тогда делать?Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 26 июня 2018

Честно говоря, самый простой способ выполнить такие задачи - создать электронную таблицу 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, потому что он легко сортируется как по числу, так и по строке.)

...