0

我有一张桌子

在此处输入图像描述

我的范围从“2019-01-02”到“2019-01-04”

我需要从给定范围之间的started_at和ended_at(可为空)生成ID和DATES(生成)

结果必须是这样的:

在此处输入图像描述

表中的 ID 4 不包含在结果中,因为它的started_at 和ended_at 不在“2019-01-02”和“2019-01-04”范围内

我需要在 postgres 中执行此操作的查询。

4

2 回答 2

1

利用generate_series()

select t.id, g.dt::date
from the_table t
  cross join generate_series(t.started_at::date + 1,
                             least(t.ended_at::date, date '2019-01-04'),
                             interval '1 day') as g(dt)
where t.started_at >= date '2019-01-02' 
  and t.started_at < date '2019-01-04';
于 2020-04-09T09:49:44.497 回答
0

工作了这个变种:

select t.id, g.dt::date from the_table t 
cross join generate_series(t.started_at::date + 1, 
 least(t.ended_at::date, date '2019-01-04'), interval '1 day') as g(dt) 
where dt >= date '2019-01-02' and dt < date '2019-01-04';
于 2020-04-09T11:09:40.553 回答