postgresql - 使用 generate_series() 为每一天生成 30 天的日期范围?

标签 postgresql set date-arithmetic generate-series

我的目标是使用 PostgreSQL 创建一个看起来像这样的表:

date           date_start        date_end
12/16/2015     11/17/2015        12/16/2015
12/17/2015     11/18/2015        12/17/2015
etc.

这样我就可以连接到另一个表,以获取 30 天滚动窗口中每个日期的聚合。我一直在做一些研究,我认为 generate_series() 是我想要使用的,但我不确定。

最佳答案

像这样:

SELECT '2015-12-16'::date + g - 30 AS date_start
     , '2015-12-16'::date + g      AS date_end
FROM   generate_series (0, 25) g; -- number of rows

我跳过了多余的 date 列。 (无论如何,您都不应该使用基本类型名称作为标识符。)

有一个变体 generate_series()它适用于时间戳,但生成 integer 数字的简单版本同样适用于日期。可能会更好,因为您可以避免时区可能造成的混淆。

始终对日期文字使用 ISO 8601 格式,这对于任何 datestyle 或语言环境设置都是明确的。

相关:

关于postgresql - 使用 generate_series() 为每一天生成 30 天的日期范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319224/

相关文章:

java - Java中Set<Set<T>>的使用和打印内容

python - 使用元组键从 Dictionary[key1,key2] 中获取第一个键的列表

mysql - MySQL 在给定一周内检索值的最有效方法?

postgresql - 错误 "password authentication failed for user "bucardo"at/usr/local/bin/bucardo line 308"while adding postgresql database in bucardo

ruby-on-rails - Postgresql 特定的数据库错误 : "ActiveRecord::StatementInvalid: PGError: ERROR: operator does not exist"

postgresql - PostgreSQL 的解释究竟告诉我什么?

vb.net - 如何计算两个日期时间之间的正差

sql - postgres 数据库的 ShareLock 和 ExclusiveLock

set - 如何在 coq 中使用子集公理定义空集

java - 两个日期之间的差异 (Android)