【问题标题】:Date range to row in postgres在 postgres 中行的日期范围
【发布时间】:2021-10-22 01:42:12
【问题描述】:

我在 postgres 中有一张这样的表:

id open_date close_date
5 2006-08-04 2019-12-31

它们之间存在 4897 天。我需要将日期范围转换为日期,以便每天有一条记录。例如:

id open_date close_date valid_date
5 2006-08-04 2019-12-31 2006-08-04
5 2006-08-04 2019-12-31 2006-08-05
5 2006-08-04 2019-12-31 2006-08-06
... .......... .......... ..........
5 2006-08-04 2019-12-31 2019-12-31

我尝试了here 提供的查询,如下所示:

SELECT
    id,
    open_date,
    close_date,
    open_date + seq.seqnum * interval '1 day' AS valid_date,
  FROM
    TAB1
    LEFT JOIN (
        SELECT
            row_number() over () AS seqnum
        FROM
            TAB1) seq ON seqnum <= (close_date - open_date)
         )

TAB1 包含 600 行。运行此查询后,它会生成正确的记录,但每个 ID 最多只能生成 600 条记录。这意味着此日期范围仅到 2008-06-08

【问题讨论】:

    标签: sql postgresql date


    【解决方案1】:

    在 Postgres 中,您将使用 generate_series():

    select t1.*, gs.valid_date
    from tab1 t1 cross join lateral
         generate_series(t1.open_date, t1.close_date, interval '1 day') as gs(valid_date);
    

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 1970-01-01
      • 2017-03-03
      • 2015-10-25
      • 2023-02-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多