Как создать несколько строк из одной строки в Redshift SQL - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу расширить одну строку до нескольких строк в моей таблице на основе столбца в таблице в AWS Redshift.

Вот мой пример схемы таблицы и строк:

CREATE TABLE test (
  start timestamp, -- start time of the first slot
  slot_length int, -- the length of the slots in minutes
  repeat int       -- how many slots will be there
);

INSERT INTO test (start, slot_length, repeat) VALUES
('2019-09-22T00:00:00', 90, 2),
('2019-09-21T15:30:00', 60, 3);

Я хочу расширить эти две строки до 5 на основе значения столбца «repeat». Таким образом, любой ряд будет расширен "повторять" раз Первое расширение ничего не изменит. Последующие расширения должны добавить «slot_length» в столбец «start». Вот окончательный список строк, которые я хочу получить в конце:

'2019-09-22 00:00:00', 90, 2  -- expanded from the first row 
'2019-09-22 01:30:00', 90, 2  -- expanded from the first row
'2019-09-21 15:30:00', 60, 3  -- expanded from the second row
'2019-09-21 16:30:00', 60, 3  -- expanded from the second row
'2019-09-21 17:30:00', 60, 3  -- expanded from the second row

Можно ли это сделать с помощью чистого SQL в Redshift?

1 Ответ

0 голосов
/ 17 февраля 2020

Это SQL должно решить вашу цель. Пожалуйста, проголосуйте "за", если это произойдет.

    select t.start
    , case when rpt.repeat>1 
           then dateadd(min,t.slot_length*(rpt.repeat-1),t.start) 
           else t.start 
           end as new_start
    , t.slot_length
    , t.repeat
    from schema.test t
    join (select row_number() over() as repeat from schema.random_table) rpt
    on t.repeat>=rpt.repeat
    order by t.slot_length desc,rpt.repeat;

Обратите внимание, что "random_table" в вашей схеме должен содержать как минимум столько же строк, сколько максимальное значение в столбце "repeat".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...