首页 > 解决方案 > 获取具有重叠繁忙时间的可用日期间隔

问题描述

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

可能日期表(时段)

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

忙碌的时候

ID MEET_BEG MEET_END
1 2021 年 11 月 10 日 09:00:00 2021 年 11 月 10 日 09:15:00
2 2021 年 11 月 10 日 09:32:24 2021 年 11 月 10 日 09:46:00

期望的结果:

ID SLOT_BEG SLOT_END
2 2021 年 11 月 10 日 09:15:00 2021 年 11 月 10 日 09:30:00

db<>在这里摆弄

我无法找到处理重叠案例的方法,例如meet ID 2- 它需要阻止 2 个插槽,因为开始日期未对齐。

任何帮助表示赞赏。

标签: sqloracledatetime-conversion

解决方案


not exists如果倒数确实重叠,则与子查询测试一起使用

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

请注意,如果会议在(或等于)时隙开始之前结束,则如果时隙在会议开始之前(或等于)结束,则间隔不会重叠。 OR

因此,对这个谓词进行否定以获得重叠会议并检查not exists此类会议是否不存在..


推荐阅读