获取具有重叠繁忙时间的可用日期间隔

Getting available date intervals with overlapping busy times

我正在尝试从预定义的可用日期和繁忙时间获取可用日期间隔。

Table 个可能的日期(时段)

ID SLOT_BEG SLOT_END
1 11/10/2021 09:00:00 11/10/2021 09:15:00
2 11/10/2021 09:15:00 11/10/2021 09:30:00
3 11/10/2021 09:30:00 11/10/2021 09:45:00
4 11/10/2021 09:45:00 11/10/2021 10:00:00

繁忙时间

ID MEET_BEG MEET_END
1 11/10/2021 09:00:00 11/10/2021 09:15:00
2 11/10/2021 09:32:24 11/10/2021 09:46:00

想要的结果:

ID SLOT_BEG SLOT_END
2 11/10/2021 09:15:00 11/10/2021 09:30:00

db<>fiddle here

我无法找到处理重叠情况的方法,例如 meet ID 2 - 它需要阻止 2 个时段,因为开始日期不一致。

感谢任何帮助。

使用 not exists 与子查询测试是否 invervals 重叠

select * from T_TMP_SLOT s
where not exists (
  select null from T_TMP_MEET m
  where  not (s.SLOT_END <= m.MEET_BEG or m.MEET_END <= s.SLOT_BEG)
  );

        ID SLOT_BEG            SLOT_END           
---------- ------------------- -------------------
         2 11.10.2021 09:15:00 11.10.2021 09:30:00

请注意,如果 slotmeeting 开始之前(或等于)开始,间隔 不会 重叠=28=] OR 如果 会议 在(或 eq) slot 开始之前结束。

因此对该谓词进行 否定 以获得 重叠 会议并检查 not exists 这样的会议不存在..