获取具有重叠繁忙时间的可用日期间隔
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
请注意,如果 slot 在 meeting 开始之前(或等于)开始,间隔 不会 重叠=28=] OR
如果 会议 在(或 eq) slot 开始之前结束。
因此对该谓词进行 否定 以获得 重叠 会议并检查 not exists
这样的会议不存在..
我正在尝试从预定义的可用日期和繁忙时间获取可用日期间隔。
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
请注意,如果 slot 在 meeting 开始之前(或等于)开始,间隔 不会 重叠=28=] OR
如果 会议 在(或 eq) slot 开始之前结束。
因此对该谓词进行 否定 以获得 重叠 会议并检查 not exists
这样的会议不存在..