我正在使用generate_series
函数来提取start_date
和end_date
之间的日期,并且我正在尝试使用daterange
合并日期。我写了这个查询:
with a as(
select d.day::date as day from (select * from generate_series('2018-08-22'::timestamp, '2019-07-12'::timestamp,
concat(greatest(date_part('days','2019-07-12'::timestamp - '2018-08-22'::timestamp)/8,1), ' day')::interval)) as d(day))
select daterange(day,(lead(day) over (order by day) - interval '1 day')::date,'[]')
FROM a
我得到了这些结果:
"[2018-08-22,2018-10-01)"
"[2018-10-01,2018-11-11)"
"[2018-11-11,2018-12-21)"
"[2018-12-21,2019-01-31)"
"[2019-01-31,2019-03-12)"
"[2019-03-12,2019-04-22)"
"[2019-04-22,2019-06-01)"
"[2019-06-01,2019-07-12)"
"[2019-07-12,)"
我不想显示最后一行"[2019-07-12,)"
。如何管理查询以不显示包含Infinity
值的最后一行。
答案 0 :(得分:1)
我将lead()
移到CTE并使用基于此的逻辑:
with dr as (
select gs.day::date as day, lead(gs.day) over (order by day) as next_day
from generate_series('2018-08-22'::timestamp, '2019-07-12'::timestamp,
concat(greatest(date_part('days','2019-07-12'::timestamp - '2018-08-22'::timestamp)/8,1), ' day')::interval
) gs(day)
)
select daterange(day, (next_day - interval '1 day')::date)
from dr
where next_day is not null