给出下表,我想发现2个或更多用户之间发生重叠的时间间隔,然后记录这些时间以及重叠中涉及的用户。我不知道如何处理这个问题,所以任何帮助都将不胜感激
Table1:
UserID StartDate EndDate
1 15:00 22:00
2 12:00 18:00
3 02:00 09:00
4 07:00 13:00
Expected Result:
StartDate EndDate Users
15:00 18:00 1,2
07:00 09:00 3,4
12:00 13:00 2,4
答案 0 :(得分:3)
此处位于SQL Fiddle。
但如果你想要一些解释:
我在那些有重叠的行上加入了表格两次:
from over t1 join over t2 on t1.START < t2.END and t1.START > t2.START
然后选择最高开始和最低结束日期:
greatest(t1.START, t2.START), least(t1.END, t2.END)
...并且在嵌套选择中对那些覆盖iterval的行的
t3.START <= greatest(t1.START, t2.START) and t3.END >= least(t1.END, t2.END)