1
A
回答
0
在更新現有行的值時,您需要標識每個device_id
之前的行。您可以通過"timestamp"
與窗函數做到這一點,劃分由device_id
和排序行,像這樣:
UPDATE my_table SET distance = cum_dist
FROM (
SELECT dev, t, sum(d) OVER (PARTITION BY dev ORDER BY t) AS cum_dist
FROM (
SELECT mt.device_id AS dev, mt."timestamp" AS t,
coalesce(ST_Distance(mt.GPS_location, lag(mt.GPS_location) OVER (PARTITION BY mt.device_id ORDER BY mt."timestamp")), 0.) AS d
FROM my_table mt
) sub2
) sub
WHERE my_table.device_id = sub.dev
AND my_table."timestamp" = sub.t;
解釋幾句:
- 最內層查詢
sub2
計算距離到特定設備的以前的GPS位置。它使用lag()
function這樣做,coalesce()
函數確保系列中的第一個點距離爲0
而不是NULL
。 - 在下一個查詢
sub
中,再次使用窗口函數計算累積距離,但這次是使用衆所周知的聚合函數sum()
。 - 然後通過使用
device_id
和"timestamp"
列將查詢sub
鏈接到表,將累積距離「更新到」表中。
與所有更新一樣,首先運行查詢以查看它是否生成正確的結果,然後執行UPDATE
。
相關問題
- 1. 計算距離
- 2. 計算距離
- 3. 距離計算
- 4. 計算距離
- 5. 計算距離
- 6. 計算距離
- 7. 計算距離
- 8. 計算距離
- 9. 計算距離
- 10. 計算距離
- 11. 計算距離
- 12. 計算距離
- 13. 計算距離位置的距離 - iPhone
- 14. 如何計算距離cellID的距離?
- 15. 計算距離CoreLocation
- 16. Matlab計算距離
- 17. PostGis距離計算
- 18. MATLAB計算距離
- 19. 計算Levenshtein距離
- 20. Cloudant中的距離計算
- 21. 計算距離的Android
- 22. 計算路線的距離
- 23. 兩地的距離計算
- 24. 計算給定的距離
- 25. 計算距離的功能
- 26. 重新計算距離矩陣
- 27. 加速R算法來計算Hellinger距離的距離矩陣
- 28. 距離計算優化
- 29. 計算馬氏距離
- 30. 計算最短距離
我首先嚐試使用select子句,但缺少括號,我添加了別名的括號,然後它抱怨device_id不存在。這就是別名的樣子:FROM「my_table」mt)s) – user2304819
確實有一個括號和別名缺失;看到更新的答案。 'device_id'應該沒有問題,但是添加表限定符只是爲了確保。你能再次檢查嗎? – Patrick