SQL查询,只有一个表

SQL查询,只有一个表,sql,tsql,Sql,Tsql,我有开始时间和结束时间的单位。在另一个单元之后开始,在另一个单元到达终点之前结束的单元已通过该单元。我想计算每个单元通过了多少个单元,以及每个单元通过了多少个单元 我的桌子看起来像这样: 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

我有开始时间和结束时间的单位。在另一个单元之后开始,在另一个单元到达终点之前结束的单元已通过该单元。我想计算每个单元通过了多少个单元,以及每个单元通过了多少个单元

我的桌子看起来像这样:

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
结果应该是这样的:

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
select t1.id, 
sum (case when t1.startTime < t2.startTime and t1.endTime > t2.endTime then 1 else 0 end) as passed_by,
sum(case when t1.startTime > t2.startTime and t1.endTime < t2.endTime then 1 else 0 end) as passed
from Table1 t1
inner join Table1 t2 on t1.id <> t2.id
group by t1.id
SELECT
    id ,
    passed =
    (
       select count(rr.id) from race r
        join race rr ON r.id != rr.id
        where (r.start > rr.start) and (r.[end] < rr.[end]) and r.id = ro.id
    ) ,
    passedby =
    (
       select count(rr.id) from race r
        join race rr ON r.id != rr.id
        where (r.start < rr.start) and (r.[end] > rr.[end]) and r.id = ro.id
    )
  FROM race ro