我正在处理路况数据。我有以下数据表。我想在10米的位置上每秒钟获得所有车辆的平均速度。数据时间间隔为0.2秒。首先,我需要确定每秒的车辆平均速度。然后我需要确定沿该位置的10米间隔每秒的平均车辆速度。
Sim Time (sec) Veh No Position (m) Speed (km/hr)
0.20 1 0.01 0.00
0.40 1 2.74 34.56
0.60 1 5.46 23.45
0.60 2 2.20 45.12
0.60 3 1.30 25.12
0.80 1 8.18 34.12
0.80 2 5.67 20.19
0.80 3 4.65 34.54
1.00 1 10.91 21.15
1.00 2 9.14 19.28
1.00 3 8.00 25.12
1.20 1 13.63 34.12
1.20 2 12.61 28.45
1.20 3 11.35 34.12
1.20 4 0.87 32.11
1.40 1 16.35 21.18
1.40 2 16.07 23.12
1.40 3 14.70 24.34
1.40 4 4.44 27.76
1.60 1 19.08 34.12
1.60 2 19.54 25.87
1.60 3 18.05 20.12
1.60 4 8.00 34.11
1.60 5 1.65 21.11
1.80 1 21.80 29.34
1.80 2 23.01 25.98
1.80 3 21.40 22.31
1.80 4 11.57 33.98
1.80 5 4.37 21.87
2.00 1 24.52 29.34
2.00 2 26.48 26.01
2.00 3 24.75 22.98
2.00 4 15.14 32.91
2.00 5 7.08 22.34
2.20 1 27.25 28.67
2.20 2 29.95 25.89
2.20 3 28.10 23.01
2.20 4 18.70 31.23
2.20 5 9.79 23.03
2.40 1 29.97 27.67
2.40 2 33.42 26.56
2.40 3 31.44 24.12
2.40 4 22.27 30.54
2.40 5 12.48 24.01
2.40 6 1.35 32.76
2.60 1 32.69 23.34
2.60 2 36.88 34.32
2.60 3 34.79 32.32
2.60 4 25.83 26.23
2.60 5 15.16 34.21
2.60 6 5.20 23.21
2.80 1 35.42 26.21
2.80 2 40.35 31.01
2.80 3 38.14 23.45
2.80 4 29.40 25.74
2.80 5 17.83 24.61
2.80 6 9.05 28.65
2.80 7 3.07 21.34
2.80 8 2.10 26.34
3.00 1 38.14 27.32
我尝试过这个。尽管它非常基础,但是却没有任何进展:
DECLARE @i DEC = 1.00
DECLARE @j DEC = 10.00
SELECT [Sim Time (sec)], [Position (m)], AVG([Speed (km/hr)]) as AvgSpeed from [Sim VehRecord]
GROUP BY [Sim Time (sec)], [Position (m)]
HAVING [Sim Time (sec)] > @i AND [Sim Time (sec)] < @i+1 AND [Position (m)] > @j AND [Position (m)] < @j+10
我希望结果应该如下:
Sim Time(sec) Position (m) Avg Speed (km/hr)
1.00 10.00 29.05
1.00 20.00 21.15
2.00 10.00 26.55
2.00 20.00 28.39
2.00 30.00 25.99
3.00 10.00 25.89
3.00 20.00 28.52
3.00 30.00 26.82
3.00 40.00 27.21
3.00 50.00 31.01
我也尝试过这个。但是结果以零记录结束。
WITH Temp AS
( SELECT 3 as SimTime , 0 as Position
UNION ALL
SELECT SimTime+1, Position + 10
FROM Temp
WHERE Position < 10000
)
SELECT [Sim Time (sec)], [Position (m)], AVG([Speed (km/hr)]) as AvgSpeed from [Sim VehRecord]
INNER JOIN Temp
ON [Sim VehRecord].[Sim Time (sec)] = Temp.SimTime
WHERE [Sim Time (sec)] > Temp.SimTime AND [Sim Time (sec)] < Temp.SimTime + 1
AND [Position (m)] > Temp.Position AND [Position (m)] < Temp.Position+10
GROUP BY [Sim Time (sec)], [Position (m)]
答案 0 :(得分:0)
我从另一个论坛获得了解决方案。它按预期工作。
SELECT ceiling([Sim Time (sec)]), ceiling([Position (m)]/10)*10, Avg([Speed (km/hr)]) AS AvgSpeed
FROM [Sim VehRecord]
WHERE [Position (m)] > 0
GROUP BY ceiling([Sim Time (sec)]), ceiling([Position (m)]/10)*10
ORDER BY ceiling([Sim Time (sec)]), ceiling([Position (m)]/10)*10
感谢所有人。