Вопрос по sql-server-2008 – Как сделать запрос цикла SQL, чтобы проверить разницу между значениями?

0

во-первых, я не являюсь носителем английского языка, и это трудно объяснить. Если у вас есть какие-либо сомнения, пожалуйста, дайте мне знать.

Мы используем устройство слежения за автотранспортными средствами GPS, которое запрограммировано на отправку и сохранение в БД информации о положении автомобиля каждые 5 минут, когда он не движется, и каждые 100 метров, когда он движется.

Эта БД имеет таблицу под названием «vehicle_gps» который хранит данные со значениями, такими как скорость, позиция, дата и время, vehicle_gps_id.

Мне нужен какой-то запрос, который покажет различные позиции, в которых транспортное средство остановилось более определенного времени (например, 2 минуты, отбрасывая светофоры).

Например, мне нужно что-то, что может сказать мне следующее: & quot; Транспортное средство находилось на Позитоне1 (P1) в 8:00, оно покинуло P1 в направлении P2, достигнув его в 8.20. Транспортное средство оставалось в P2 до 10.20, и это достигло P3 в 10.50 & quot;

пример записей в таблице

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 минут, что означает, что автомобиль остановился.

ТИА

Ваш Ответ

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.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Heinser Diaz
Error: User Rate Limit Exceeded Heinser Diaz

Похожие вопросы