我正在处理大量的交通数据。我想在MS Access数据库中识别已更改车道的车辆。我只想标识那些更改了车道的记录(紧接两个记录:车道改变之前和车道改变之后)
交通数据:
Vehicle_ID Lane_ID Frame_ID Distance
1 2 12 100
1 2 13 103
1 2 14 105
2 1 15 107
***2 1 16 130
2 2 17 135***
2 2 18 136
***3 1 19 140
3 2 20 141***
3 2 21 147
4 2 22 149
***4 2 23 151
4 1 24 154***
4 1 25 159
在这里的协助下,我整理了那些更改了车道的Vehicle_ID:
SELECT t.Vehicle_ID, COUNT(t.Lane_ID) AS [Lane Count]
FROM (
SELECT DISTINCT Vehicle_ID, Lane_ID FROM Table1
) AS t
GROUP BY t.Vehicle_ID
HAVING COUNT(t.Lane_ID) > 1
显示结果:
Vehicle_ID Lane Count
2 2
3 2
4 2
现在,我想通过分离立即的两个记录(车道变更之前和之后)来对车道变更记录进行进一步分析。我想要的输出将是:
所需结果:
Vehicle_ID Lane_ID Frame_ID Distance
***2 1 16 130
2 2 17 135***
***3 1 19 140
3 2 20 141***
***4 2 23 151
4 1 24 154***
答案 0 :(得分:0)
假设帧ID没有间隙,则可以使用join
s来做到这一点:
select t1.*
from (table1 as t1 inner join
table1 as t1prev
on t1prev.Vehicle_ID = t1.Vehicle_ID and
t1prev.frame_id = t1.frame_id - 1
) inner join
table1 as t1next
on t1next.Vehicle_ID = t1.Vehicle_ID and
t1next.frame_id = t1.frame_id + 1
where t1prev.lane_id <> t1.lane_id or
t1next.lane_id <> t1.lane_id;
否则,这将是一个非常昂贵的查询。
答案 1 :(得分:0)
您可以使用EXISTS做到这一点:
select t.* from Table1 t
where
exists (
select 1 from Table1
where
vehicle_id = t.vehicle_id
and
frame_id in (t.frame_id - 1, t.frame_id + 1)
and
lane_id <> t.lane_id
)