2012-05-16 50 views
0

首先,我不是一個母語是英語,這是一個很難解釋的問題。如果您有任何疑問,請告訴我。如何使sql循環查詢檢查值之間的差異?

我們使用GPS車輛跟蹤裝置,它被編程爲發送和存儲在一個數據庫中車輛的位置時不動,每5分鐘,移動時每隔100米。

該DB有一個稱爲「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

回答

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語句之後輸入您想要做的任何事情。

+0

感謝您的答覆。我得到2個錯誤:1)「關鍵字SET附近的語法錯誤」,位於註釋部分正下方。 2)最後「車輛光標附近的語法錯誤」。 –

+0

啊我忘了更改一個變量名稱,不知道它是否會解決這兩個問題,我編輯過,所以你可以再試一次。 – jeschafe

+0

我沒有修改註釋部分,因此錯誤消息= P。另一方面,我仍然不知道如何顯示我每次休息時需要的信息。只是爲了測試它在工作,我做了一個選擇查詢,因此它給了我8個選擇查詢結果,這是正確的,因爲這是停車次數。無論如何,再次感謝您的幫助 –

相關問題