我正在处理大量的交通数据。我想识别改变了车道的车辆,我是VB.Net的Microsoft Access。
交通数据:
Vehicle_ID Lane_ID Frame_ID Distance
1 2 12 100
1 2 13 103
1 2 14 105
2 1 16 130
2 1 17 135
2 2 18 136
3 1 19 140
3 2 20 141
我试图区分Vehicle_ID,然后计数(区别Lane_ID)。 我可以列出不同的Vehicle_ID,但它会计算总Lane_ID而不是Distinct Lane_ID。
SELECT
Distinct Vehicle_ID, count(Lane_ID)
FROM Table1
GROUP BY Vehicle_ID
显示结果:
Vehicle_ID Lane Count
1 3
2 3
3 2
正确的结果:
Vehicle_ID Lane Count
1 1
2 2
3 2
此外,我想获取所有更改了车道的Vehicle_ID(所有数据,包括以前的车道和新的车道)。输出结果可能是这样的:Vehicle_ID Lane_ID Frame_ID Distance
2 1 17 135
2 2 18 136
3 1 19 140
3 2 20 141
答案 0 :(得分:2)
访问不支持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
所以
识别改变车道的车辆
您需要添加到上述查询中:
var performance = window.performance.getEntriesByType("navigation");
if(String(performance[0].type) === "reload"){
//do redirection.
}
答案 1 :(得分:0)
SELECT
Table1.Vehicle_ID,
LANE_COUNT
FROM Table1
JOIN (
SELECT Vehicle_ID, COUNT(*) as LANE_COUNT FROM (
SELECT distinct Vehicle_ID, Lane_ID FROM Table1
) dTable1 # distinct vehicle and land id
GROUP BY Vehicle_ID # counting the distinct
) cTable1 ON cTable1.Vehicle_ID = Table1.Vehicle_ID # join the table with the counting
我认为您应该一个接一个地做
答案 2 :(得分:0)
如果您想更改车道 的车辆,则可以执行以下操作:
SELECT Vehicle_ID,
IIF(MIN(Lane_ID) = MAX(Lane_ID), 0, 1) as change_lane_flag
FROM Table1
GROUP BY Vehicle_ID;
我认为这与计算不同车道的数量一样好,因为您没有在计算实际的“车道变化”。因此,即使车辆多次改变车道,这也将返回“ 2”:
2 1 16 130
2 1 17 135
2 2 18 136
2 1 16 140
2 1 17 145
2 2 18 146