使用 generate_series() 为每一天生成 30 天的日期范围?
Using generate_series() to produce 30 day date ranges for each day?
我的目标是使用 PostgreSQL 创建一个看起来像这样的 table:
date date_start date_end
12/16/2015 11/17/2015 12/16/2015
12/17/2015 11/18/2015 12/17/2015
etc.
这样我就可以加入另一个 table 以获取连续 30 天 window 中每个日期的聚合。我一直在做一些研究,我认为 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 创建一个看起来像这样的 table:
date date_start date_end
12/16/2015 11/17/2015 12/16/2015
12/17/2015 11/18/2015 12/17/2015
etc.
这样我就可以加入另一个 table 以获取连续 30 天 window 中每个日期的聚合。我一直在做一些研究,我认为 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
或语言环境设置都是明确的。
相关: