如何将列添加到generate_series查询中



在查找日期范围时,是否也要让generate_series返回开始日期和结束日期?

select 
    '2014-06-05 00:00:00'::timestamp + ('1 month'::INTERVAL * s.a) AS date 
from 
    generate_series(1, cast(extract(month from age('2014-09-05'::date, '2014-06-05'::date)) AS integer), 1) as s(a);

给出此输出

date
2014-07-05 00:00:00
2014-08-05 00:00:00
2014-09-05 00:00:00

这很好,但是我想要

start_date     end_date       date
2014-06-05    2014-09-05    2014-07-05 00:00:00
2014-06-05    2014-09-05    2014-08-05 00:00:00
2014-06-05    2014-09-05    2014-09-05 00:00:00

原因是我正在从另一个表中提取多个开始/结束对,但无法找到将它们连接在一起的方法。我还使用PostgeSQL版本8.2.15(因此使用了更复杂的generate_series函数)。

为了将其扩展到我的主要问题,我有一个包含这些开始和结束时间对的表。

    start_date         end_date
2014-08-25 00:00:00 2014-09-25 00:00:00
2014-05-16 00:00:00 2014-08-16 00:00:00
2014-09-09 00:00:00 2014-12-09 00:00:00
2014-06-05 00:00:00 2014-07-05 00:00:00
2014-05-19 00:00:00 2014-08-19 00:00:00
2014-05-15 00:00:00 2014-07-15 00:00:00
2014-09-04 00:00:00 2014-11-04 00:00:00

如何遍历此表并将其与扩展的日期范围连接起来?

考虑升级到当前版本。Postgres 8.2早已死亡并被遗忘。

对于Postgres 8.2(或更高版本,但现代Postgres中有更优雅的解决方案)。

假设这是关于日期的所有,而不是时间戳。

提供start_dateend_date一次:

SELECT start_date, end_date
     , (start_date + interval '1 month'
                   * generate_series(1, months))::date AS the_date
FROM  (  
   SELECT extract(month from age(end_date, start_date))::int AS months
        , start_date, end_date
   FROM (SELECT '2014-06-05'::date AS start_date
              , '2014-09-05'::date AS end_date
        ) data
   ) sub;

使用列名the_date而不是不应用作标识符的date

从表t中提取值:

SELECT start_date, end_date
     ,(start_date + interval '1 month'
                  * generate_series(1, months))::date AS the_date
FROM  (SELECT *, extract(month FROM age(end_date, start_date))::int AS months
       FROM   t) sub;

无子查询

SELECT t_id, start_date, end_date
     ,(start_date + interval '1 month'
                  * generate_series(1, extract(month from age(end_date
                                                            , start_date))::int)
                  )::date AS the_date
FROM   t;

Postgres 8.3的SQL Fiddle

相关内容

  • 没有找到相关文章

最新更新