0

まず第一に、私は英語のネイティブ スピーカーではないので、これは説明が難しい問題です。ご不明な点がございましたら、お気軽にお問い合わせください。

移動していないときは 5 分ごと、移動中は 100 メートルごとに車両の位置を送信して DB に保存するようにプログラムされた GPS 車両追跡デバイスを使用しています。

この DB には、速度、位置、日時、vehicle_gps_id などの値を含む「vehicle_gps」というテーブルがあります。

車両が一定時間以上停止したさまざまな位置を表示する何らかのクエリが必要です (例: 2 分、信号無視)。

たとえば、次のことを教えてくれるものが必要です。「車両は 8:00 に位置 1 (P1) にあり、P1 を出発して P2 に向かい、8.20 に到達しました。車両は 10.20 まで P2 に留まり、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 分を超えた場合 (車両が停止したことを意味します) を中断するループが必要でした。

ティア

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 に答える