我有一張表格,其中包含來自GPS模塊的位置和時間戳記信息。該表看起來是這樣的:SQL Server 2008:循環播放SELECT +根據循環中的位置執行其他查詢的結果和結果
declare @VehicleData table
(
[TimeStamp] DateTime,
Latitude float,
Longitude float
)
insert into @VehicleData
values ('2012/03/06 10:00', 1, 1),
('2012/03/06 10:01', 1, 2),
('2012/03/06 11:00', 0, 0),
('2012/03/06 11:01', 0, 0),
('2012/03/06 11:02', 2, 2),
('2012/03/06 11:03', 2, 2),
('2012/03/06 11:04', 2, 3),
('2012/03/06 11:20', 0, 0),
('2012/03/06 11:21', 5, 5),
('2012/03/06 11:22', 5, 6),
('2012/03/06 11:23', 5, 6),
('2012/03/06 11:24', 5, 7),
('2012/03/06 11:25', 5, 8)
你會發現,一些數據點的有0緯度和經度值,由於GPS模塊沒有在當時的修復程序。從該表中檢索數據點時,我想要執行的操作是將所有零緯度和經度值設置爲最後一次非零緯度和經度值。我目前在我的客戶端代碼中執行此操作,但我想將其集成到我的數據庫存儲過程中。客戶端代碼看起來是這樣的:
Dim StartDate = '2012/03/06 11:00'
Dim EndDate = '2012/03/06 11:25'
Dim Results = GetVehicleDataBetweenDates(StartDate, EndDate)
Dim LastKnownLatitude = 0, LastKnownLongitude = 0
If Results(0).Latitude = 0 Then
'Query database for last non-zero position before StartDate
GetLastKnownPositionBeforeDate(StartDate, LastKnownLatitude , LastKnownLongitude)
Else
LastKnownLatitude = Results(0).Latitude
LastKnownLongitude = Results(0).Longitude
EndIf
For i = 0 to Results.Count - 1
If Results(i).Latitude = 0 Then
Results(i).Latitude = LastKnownLatitude
Results(i).Longitude = LastKnownLongitude
Else
LastKnownLatitude = Results(i).Latitude
LastKnownLongitude = Results(i).Longitude
EndIf
Next
以上可能應該導致以下結果,用箭頭指向先前零點位置:
('2012/03/06 11:00', 1, 2), <--
('2012/03/06 11:01', 1, 2), <--
('2012/03/06 11:02', 2, 2),
('2012/03/06 11:03', 2, 2),
('2012/03/06 11:04', 2, 3),
('2012/03/06 11:20', 2, 3), <--
('2012/03/06 11:21', 5, 5),
('2012/03/06 11:22', 5, 6),
('2012/03/06 11:23', 5, 6),
('2012/03/06 11:24', 5, 7),
('2012/03/06 11:25', 5, 8)
我怎麼會去實現這個SQL中有相同的功能?
附錄:感謝迄今爲止的所有迴應。我應該指出,我不想更新原始表 - 我只想修改查詢的結果。原因是因爲表中的行不按時間順序添加。
關於您的附錄,danihp的回答正是您所需要的。 – aaroncatlin 2012-03-06 12:17:20
你爲什麼不忽略它們?即從@VehicleData中選擇*,其中<> 0和經度<> 0 – Adrian 2012-03-06 12:17:42
@Adrian:爲了簡化我的問題,我沒有包含完整的表格描述。除了時間和地點,每行還有一些與當時模塊狀態有關的數據。即使沒有有效的位置,我也需要這些信息。 – 2012-03-06 12:26:39