2011-12-02 20 views
1

私は一連の開始日と終了日を持つテーブルを持っています、そして、私はいくつのユニークセッションが存在するか、つまり重複しない別個の期間がいくつあるか把握しようとしています。だから、一意の時間間隔でレコード数を取得するにはどうすればよいですか?

テーブルは次のように見える場合:

ID | StartTime | EndTime 
A | 1/1/11 12:00 | 1/1/11 14:00 
B | 1/1/11 12:30 | 1/1/11 15:00 
C | 1/1/11 14:30 | 1/1/11 15:30 
D | 1/1/11 16:00 | 1/1/11 16:30 
E | 1/1/11 16:30 | 1/1/11 17:00 

レコードのA、B及びCの重複以来3つのセッションの数を返すクエリのどのような?

+0

Bの代わりにAを保持する方法を教えてください。 – JNK

+0

それは問題ではない、私が返すことが必要なのはカウントです。したがって、3つの固有のセッションがあるとクエリからわかる場合は、AまたはBを除外しても問題ありません。 – sXe

+0

また、2つの時間スパンが重複していても完全に含まれていない場合はどうなりますか? Bは12:30〜15:00でした。 Aと重複しますが、どちらも完全には含まれていません。どちらも結果セットに1つしかないでしょうか? – king14nyr

答えて

2

これを試してください。 SQL Server 2008で正しい数を返します。

DECLARE @t table (id char(1), Starttime smalldatetime, endtime smalldatetime) 

INSERT INTO @t 
VALUES 
('A','1/1/11 12:00','1/1/11 14:00'), 
('B','1/1/11 12:30','1/1/11 15:00'), 
('C','1/1/11 14:30','1/1/11 15:30'), 
('D','1/1/11 16:00','1/1/11 16:30'), 
('E','1/1/11 16:30','1/1/11 17:00') 


select 
    count(t.id) 
from 
    @t t 
WHERE NOT EXISTS ( SELECT 1 FROM @t t2 
        WHERE (t.starttime > t2.starttime 
        AND t.endtime < t2.starttime) 
        OR (t.starttime < t2.starttime 
        AND t.endtime > t2.starttime)) 
+1

誰でもサンプルテーブルを使った実用的な答えについてのdownvoteについて説明しますか? – JNK

+0

これは私のテストのすべてをパスしているようです – msmucker0527

+0

それは完璧に動作し、答えは非常に単純に書かれました - ありがとう! – sXe

関連する問題