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
.