sql - 获取具有重叠繁忙时间的可用日期间隔
问题描述
我正在尝试从预定义的可用日期和繁忙时间获取可用的日期间隔。
可能日期表(时段)
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 个插槽,因为开始日期未对齐。
任何帮助表示赞赏。
解决方案
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
此类会议是否不存在..
推荐阅读
- python - 如何将视频从我的 Kivy android 应用程序流式传输到处理数据的服务器?
- ruby - 有没有办法可以在 ruby 中调用另一个类的方法?
- python - 如何使实体在pygame中因颜色碰撞而受到伤害?
- php - Microsoft 从 PHP 8 起终止对 PHP 的支持
- javascript - 如何将 32 位整数集合中的随机整数存储在紧凑的数据结构中以快速检查成员资格?
- react-native - 您的 Android App Bundle 使用错误的密钥签名
- python - TypeError: '(slice(0, 15, None), 15)' 是无效键
- google-apps-script - 使用 Google Doc API 删除超链接及其文本
- c - C - 函数调用的 sizeof() 是如何工作的?
- mysql - 如何有效地找到多对多关系中的频率