2

これらの列のテーブルでいくつかの分析を行う必要があります: 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
4

3 に答える 3

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の開始後に終了します

それからオーバーラップがあります。

于 2012-11-19T22:16:22.170 に答える
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
于 2012-11-19T21:57:59.613 に答える
-1

ネストされたクエリと COUNT を使用して、発生回数を追跡できます

 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
于 2012-11-19T21:58:11.407 に答える