1

How to generate a long date series that repeats each date 5 times, like below?

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.
Leo Jones
  • 165
  • 1
  • 12

1 Answers1

0

Redshift is not Postgres. Does not support generate_series().

The poor man's default is a number table (starting with 1). Create it once per database. Like demonstrated here.

Then:

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;

In Postgres, you can use generate_series() directly:

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

That's a CROSS JOIN, generating a Carthesian product, so each date is repeated 5 times in the example. Output is type is date after the cast. Why timestamp arguments? See:

To get your particular date format use to_char():

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

This is ordered like your example by default, but that's an implementation detail. If you need to guarantee a particular order, add ORDER BY.

Erwin Brandstetter
  • 605,456
  • 145
  • 1,078
  • 1,228
  • Thanks Erwin. It's showing a days.num does not exist error. Do numbers in the numbers table need to be consecutive? – Leo Jones Jan 25 '19 at 00:44
  • Yes, need to be consecutive. `days.num`? That's from an earlier version, right? Did you try the latest version? (Using `day.number` now.) – Erwin Brandstetter Jan 25 '19 at 01:08