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