【问题标题】:Getting available date intervals with overlapping busy times获取具有重叠繁忙时间的可用日期间隔
【发布时间】:2021-11-30 03:57:52
【问题描述】:

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

可能的日期(时段)表

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小提琴here

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

感谢任何帮助。

【问题讨论】:

    标签: sql oracle datetime-conversion


    【解决方案1】:

    使用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
    

    请注意,如果 slotmeeting OR 的开始之前(或相等)结束,则间隔不会重叠,如果 会议开始之前(或eq)结束。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2020-06-22
      相关资源
      最近更新 更多