重叠的时间间隔

时间:2014-06-16 12:50:30

标签: mysql sql database

给出下表,我想发现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

1 个答案:

答案 0 :(得分:3)

此处位于SQL Fiddle

但如果你想要一些解释:

  1. 我在那些有重叠的行上加入了表格两次:

    from over t1 join over t2 on t1.START < t2.END and t1.START > t2.START
    
  2. 然后选择最高开始和最低结束日期:

    greatest(t1.START, t2.START), least(t1.END, t2.END)
    
  3. ...并且在嵌套选择中对那些覆盖iterval的行的 ids 进行了分组:

    t3.START <= greatest(t1.START, t2.START) and t3.END >= least(t1.END, t2.END)