通过查找 table2 中的 center_geom 和表 3 中的 home_location 之间的距离来更新表 1 的“距离”列中的值。
表格1
obu_id end_location trip_id end_loc_adj distance
1 51 1234
2 57 1357 44
2 63 1351
3 21 1212 20
3 23 4313
表 2
id obu_id center_geom
int int geom
51 2 "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41"
52 3 "0101000020ED080000AE47E17A35F73341FE65F764723C0841"
57 3 "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41"
21 4 "0101000020ED080000B81E852BC555334186048C9EB1C21141"
- 现在,请参见表 1:如果我们在 end_loc_adj 中有任何值,则必须使用列:end_loc_adj 而不是 end_loc 提示:使用 if-else。
- 表 1 中的列名“end_loc”与表 2 中的列“id”具有相同的值。
表3
hhid obu_id home_location
(character Int geometry
varying)
11 1 "0101000020ED08000082E2C7A0B2413341BC5818A21F000941"
15 2 "0101000020ED080000B81E852BC555334186048C9EB1C21141"
17 3 "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41"
17 4 "0101000020ED080000B81E852BC555334186048C9EB1C21141"
22 7 "0101000020ED080000AE47E17A35F73341FE65F764723C0841"
我尝试了以下方法:
select ST_Distance_Sphere ( ST_AsText(cast(v.house_location AS text)) , ST_AsText(cast(l.center AS text)))
来自 public.locations l, clean.vehicles v 其中 l.obu_id=v.obu_id 和 l.obu_id=3
但这适用于单个obu_id
我想使用一个函数一次性完成它。请给我一些关于如何做到这一点的想法。
谢谢。