Создать серию дат с повторяющимися датами - PullRequest
0 голосов
/ 25 января 2019

Как создать длинный ряд дат, который повторяется каждую дату 5 раз, как показано ниже?

1/1/2018
1/1/2018
1/1/2018
1/1/2018
1/1/2018
1/2/2018
1/2/2018
1/2/2018
1/2/2018
1/2/2018
etc.

1 Ответ

0 голосов
/ 25 января 2019

Redshift не является Postgres. Не поддерживает generate_series().

Бедным по умолчанию является таблица чисел (начиная с 1). Создайте его один раз для каждой базы данных. Как показано здесь.

Тогда:

SELECT date '2018-1-1' + day.number - 1
FROM   number AS day
     , number AS repeat
WHERE  day.number    <= 10  -- number of days in date range
AND    repeat.number <= 5   -- number of repetitions
ORDER  BY day.number;

В Postgres , вы можете использовать generate_series() напрямую:

SELECT day::date
FROM   generate_series(timestamp '2018-1-1'  -- desired date range
                     , timestamp '2018-1-5'  -- preferably in ISO foramt
                     , interval '1 day') day
     , generate_series(1,5) repeat;          -- number of repetitions

Это CROSS JOIN, порождающее продукт из картеза, поэтому каждая дата повторяется в примере 5 раз. Вывод типа date после приведения. Почему timestamp аргументы? См:

Чтобы получить конкретный формат даты, используйте to_char():

SELECT to_char(day, 'FMMM/FMDD/YYYY')
FROM   ...

Это упорядочено, как ваш пример по умолчанию, но это детали реализации. Если вам нужно гарантировать определенный заказ, добавьте ORDER BY.

...