0

首先,我不是以英语为母语的人,这是一个很难解释的问题。如果您有任何疑问,请告诉我。

我们正在使用 GPS 车辆跟踪设备,该设备被编程为在不移动时每 5 分钟发送一次车辆位置并将其存储在数据库中,在移动时每 100 米发送一次。

该数据库有一个名为“vehicle_gps”的表,用于存储数据,包括速度、位置、日期时间、vehicle_gps_id 等值。

我需要某种查询来显示车辆停止超过一定时间的不同位置(例如2分钟,丢弃红绿灯)。

例如,我需要一些可以告诉我以下内容的信息:“车辆在 8:00 位于 Positon1 (P1),它离开 P1 前往 P2,在 8.20 到达它。车辆一直停留在 P2 直到 10.20,它在 P3 到达10.50"

表中的记录示例

vehicle_gps_id  | datetime---------- | latitude | longitude | speed

1000------------| 05/16/2012 08:00:00|50.0000   |50.00000   |40 (km/h)
1001------------| 05/16/2012 08:01:00|51.0000   |51.00000   |38 (km/h)
1002------------| 05/16/2012 08:01:23|51.0045   |50.000054  |40 (km/h)
1003------------| 05/16/2012 08:01:40|51.00540  |51.0005430 |39 (km/h)
.
.
.
1040------------| 05/16/2012 08:20:40|53.00540  |53.0005430 |0 (km/h)
1041------------| 05/16/2012 08:25:40|53.00540  |53.0005430 |0 (km/h)
1042------------| 05/16/2012 08:30:40|53.00540  |53.0005430 |0 (km/h)
.
.
.
1060------------| 05/16/2012 10:20:40|53.00540|53.0005430|20 (km/h)

我怎么能做这样的事情?

到目前为止,我能够得到固定位置之间的分钟差异,因此,我想要一个循环来检查位置之间的所有日期,并在差异超过 5 分钟时中断,这意味着车辆已经停止。

TIA

4

1 回答 1

0
DECLARE @idFrom as int,
        @idTo as int,
        @gpsDateFrom as datetime,
        @gpsDateTo as datetime
DECLARE VehicleCursor CURSOR FAST_FORWARD FOR 
SELECT  vehicle_gps_id, 
        datetimeCol
FROM    yourtable
ORDER BY vehicle_gps_id
OPEN VehicleCursor FETCH NEXT FROM VehicleCursor INTO @idFrom, @gpsDateFrom
    FETCH NEXT FROM VehicleCursor INTO @idTo, @gpsDateTo
    WHILE @@FETCH_STATUS = 0 BEGIN 
        IF DATEDIFF(MI,@gpsDateFrom,@gpsDateTo) >5
        BEGIN
            --Break (your code here)
        END
        SET @idFrom = @idTo
        SET @gpsDateFrom = @gpsDateTo
        FETCH NEXT FROM VehicleCursor INTO @idTo, @gpsDateTo
    END 
CLOSE VehicleCursor 
DEALLOCATE VehicleCursor

像这样的东西应该适合你。它是一个游标,它只在比较日期时间的所有列中运行。您可以在 if 语句后的注释部分中输入您想要执行的任何操作。

于 2012-05-16T22:05:21.353 回答