【问题标题】:Generate date series with repeating dates生成具有重复日期的日期系列
【发布时间】:2019-01-24 23:46:44
【问题描述】:

如何生成一个长日期系列,每个日期重复 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.

【问题讨论】:

  • 红移有递归 CTE 吗?
  • 也许还有其他方法可以解决您的潜在挑战,如果您更新您的问题以解释为什么需要此表,我们可能会提出替代方案。

标签: amazon-redshift


【解决方案1】:

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,生成一个Carthesian 积,因此在示例中每个日期重复5 次。转换后的输出类型为date。为什么timestamp 参数?见:

要获取您的特定日期格式,请使用 to_char():

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

默认情况下,这与您的示例一样排序,但这是一个实现细节。如果您需要保证特定订单,请添加ORDER BY

【讨论】:

  • 谢谢欧文。它显示 days.num 不存在错误。数字表中的数字需要连续吗?
  • 是的,需要连续。 days.num?那是早期版本的吧?你试过最新版本吗? (现在使用day.number。)
猜你喜欢
  • 2012-12-15
  • 2016-04-02
  • 2021-12-19
  • 2011-05-27
  • 2022-01-13
  • 1970-01-01
  • 2019-04-13
  • 2021-06-01
  • 2011-01-18
相关资源
最近更新 更多