2012-11-19 42 views
2

我必須對這些列進行一些分析: Id, UserName, DateFrom, DateTo。我必須找出一個用戶在同一時間段有更多的 。我想知道是否有一種方法可以在單個Select語句中執行此操作?.....否則,我無法想象任何更好的存儲過程......有人可以幫助我解決一些想法和提示。sql 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 
+0

請顯示示例數據和您嘗試過的內容。 –

回答

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 

的想法是,

  • 如果期間A開始在期間B結束之前
  • ,期間A在期間B開始後結束

然後存在重疊。

+0

非常感謝 – user26411

1
select * 
from mytable t1 
join mytable t2 
    on t1.UserName = t2.username 
    and t1.DateFrom <= t2.DateTo -- this is how to check for any overlap 
    and t1.DateTo >= t2.DateFrom -- this is how to check for any overlap 
    and t1.id < t2.id -- don't join to self, which would otherwise match 
+0

假設你有'(1月1日,1月3日)'和'(1月2日,1月4日)''的範圍。他們會經歷兩次比較,一次是「t1,t2」,一次是相反的。在任何情況下都不會't1.DateFrom> = t2.DateTo',儘管範圍明顯重疊。不過,我確定這只是一個向後比較而已。 – Laurence

+1

這是行不通的,因爲只要其中一個'DateFrom'在** **另一個'DateTo'(第一次檢查)之後是**,唯一的結論就是兩個連接的條目之間沒有重疊。 –

+0

@Laurence通過簡單地將'!='修改爲'<' – Bohemian

-1

您可以使用嵌套查詢,並計數,以保持出現次數的軌道

SELECT t1.id, t1.UserName, t1.DateFrom, t1.DateTo 
FROM your_table_name t1 
WHERE (SELECT COUNT(*) 
FROM your_table_name t2 
WHERE t1.DateFrom=t2.DateFrom 
AND t1.DateTo = t2.DateTo)>1 
+0

這似乎算了平等的時間段而不是重疊的時間段,儘管也許這就是OP之後的情況。這個問題並不完全清楚。 – Laurence

+0

我以爲那是他以後的樣子。我不確定,你可能是對的。 –