Sql select语句在一定时间内查找双重预订

use*_*411 2 sql stored-procedures

我必须对这些列的表做一些分析: Id, UserName, DateFrom, DateTo.我必须找出一个用户在同一时间段内有更多的一个条目.我想知道是否有一种方法可以在一个Select语句中执行此操作?.....否则我无法想到任何比存储过程更好的东西......有人可以帮我解决一些想法和提示.

Id----------UserId-------------DateFrom------------DateTo
1-----------Tim123-------------------- 11/19/2012 08:00---11/19/2012 11:00
2-----------Tim123-------------------- 11/19/2012 10:00---11/19/2012 11:00
3-----------Tim123-------------------- 11/19/2012 12:00---11/19/2012 17:00
1-----------John123--------------------11/19/2012 08:00---11/19/2012 11:00
Run Code Online (Sandbox Code Playgroud)

Jul*_*not 5

sqlite> insert into user_data values(1, "john", "12-nov-12", "25-nov-12");
sqlite> insert into user_data values(2, "john", "24-nov-12", "25-dec-12");
sqlite> insert into user_data values(3, "jack", "12-nov-12", "25-nov-12");
sqlite> insert into user_data values(4, "jack", "26-nov-12", "30-nov-12");

sqlite> select distinct ud1.userid 
        from user_data ud1, user_data ud2
        where ud1.userid = ud2.userid 
              and ud1.datefrom <= ud2.dateto and ud2.datefrom <= ud1.dateto
              and ud1.id < ud2.id;
john
Run Code Online (Sandbox Code Playgroud)

这个想法就是这样

  • 如果期间A在期间B结束之前开始
  • 期间B结束后,期间A结束

然后有重叠.