日期之间缺失的经期数

问题描述 投票:0回答:1

我正在使用 Postgres,我想找到丢失的日期范围。我有这张包含这些数据的表格:

create table event_dates
(
    date date
);

INSERT INTO event_dates (date) VALUES ('2024-12-09');
INSERT INTO event_dates (date) VALUES ('2024-12-13');
INSERT INTO event_dates (date) VALUES ('2024-12-20');

我想找到任意范围内缺失周期的数量。例如, 在 2024-12-05 和 2024-12-25 之间我希望结果是

4
,因为:

  • 2024-12-05 和 2024-12-09 之间没有日期(第一个间隙)
  • 2024-12-09 和 2024-12-13 之间没有日期(第二个间隙)
  • 2024-12-13 和 2024-12-20 之间没有日期(第三个间隙)
  • 2024-12-20 和 2024-12-25 之间没有日期(第四个间隙)

我无法让它与ant窗口功能一起工作。

有什么线索吗?

谢谢,

sql postgresql
1个回答
0
投票

参见示例

日期
2024-12-09
2024-12-13
2024-12-20
select min(date) min_date,max(date) max_date
  ,sum(isGap) countGaps
from(
  select *
    ,case when lead(date,1,date)over(order by date)=date then 0 else 1 end isGap
  from(
    select date
    from event_dates
    where date between '2024-12-05' and '2024-12-25'
    union all 
    select '2024-12-05'::date date 
    union all 
    select '2024-12-25'::date
  ) a
)b
最小日期 最大日期 计算间隙
2024-12-05 2024-12-25 4

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.