【问题标题】:How to make a sql loop query to check difference between values?如何进行 sql 循环查询来检查值之间的差异?
【发布时间】:2012-05-16 20:08:15
【问题描述】:

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

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

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

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

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

表中的记录示例

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

【问题讨论】:

    标签: sql-server-2008 loops datediff


    【解决方案1】:
    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 语句后的注释部分中输入您想做的任何事情。

    【讨论】:

    • 感谢您的回复。我收到 2 个错误:1)“关键字 SET 附近的语法不正确”,位于注释部分的正下方。 2) 最后是“VehicleCursor 附近的语法不正确”。
    • 啊,我忘了更改变量名,不知道它是否能解决这两个问题,我已经编辑了它,所以你可以再试一次。
    • 我没有修改注释部分,因此错误消息=P。另一方面,我仍然不知道如何在每次休息时显示我需要的信息。只是为了测试它是否正常工作,我做了一个选择查询,因此它给了我 8 个选择查询结果,这是正确的,因为这是车辆停靠的次数。无论如何,再次感谢您的帮助
    猜你喜欢
    • 2020-09-17
    • 2017-03-13
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2018-11-07
    • 2016-01-14
    • 2021-03-11
    • 2011-01-05
    相关资源
    最近更新 更多