生成具有重复日期的日期系列

时间:2019-01-24 23:46:45

标签: amazon-redshift

如何生成一个长日期系列,每个日期重复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 :(得分:0)

Redshift 不是Postgres。 Does not support generate_series().

穷人的默认设置是数字表(从1开始)。每个数据库创建一次。 Like demonstrated here.

然后:

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