1

と のユニットがstartTimeありendTimeます。別のユニットの後に開始し、その別のユニットが最後に到達する前に終了したユニットは、そのユニットを通過しました。各ユニットが通過したユニット数と、各ユニットが通過したユニット数を計算したい。

私のテーブルは次のようになります。

id; startTime; endTime 
3;  1;          2
1;  1;          8
2;  2;          3
5;  2;          9
4;  2;          5
6;  3;          4

結果は次のようになります。

id; passed; passed_by
3;  0;        0
1;  0;        3
2;  1;        0
5;  0;        1
4;  1;        1
6;  3;        0
4

3 に答える 3

2
SELECT id, 
       passed = (SELECT Count(*) 
               FROM   dbo.tablename T2 
               WHERE  T2.id <> T1.id 
                      AND T2.starttime < T1.starttime 
                      AND T2.endtime   > T1.endtime), 
       passed_by = (SELECT Count(*) 
               FROM   dbo.tablename T2 
               WHERE  T2.id <> T1.id 
                      AND T2.starttime > T1.starttime 
                      AND T2.endtime   < T1.endtime) 
FROM   dbo.tablename T1 

デモ

ID    PASSED    PASSED_BY
3       0          0
1       0          3
2       1          0
5       0          1
4       1          1
6       3          0
于 2013-05-22T21:32:42.723 に答える