【发布时间】:2010-07-16 19:32:09
【问题描述】:
所以我有两张桌子:
route(#id)
step(#id,route_id,lat,lng,sequence_order)
还有 2 个 GPS 坐标:M1(lat1, lng1) M2(lat2, lng2)。
因此,我想以升序顺序查找距离 2 个 GPS 坐标中的每个至少接近 1.0 英里的所有路线。
因此,如果我发现 Route#25 在距离 M1 0.4 英里处有一个步骤 S1,在距离 M2 0.2 英里处有一个步骤 S2,那么只有当 S1 的序列号低于 S2 的序列号时,它才应该匹配。有意义吗?
假设我添加了一个计算距离的函数,我可以很容易地用这个请求来完成:
SELECT r.id,s1.lat,s1.lng,s2.lat,s2.lng,distance(s1.lat,s1.lng,lat1,lng1) as d1,distance(s2.lat,s2.lng,lat2,lng2) as d2 FROM route r
INNER JOIN step s1 ON r.id = s1.route_id
INNER JOIN step s2 ON r.id = s2.route_id AND s1.sequence_order < s2.sequence_order
WHERE d1<1.0
AND d2<1.0
我想要的行为是只保留离我的点最近的坐标 (s1.lat,s1.lng) 和 (s2.lat,s2.lng)。所以我想我可以做这样的事情:
ORDER BY d1
ORDER BY d2
GROUP BY r.id
但它只是崩溃了。
有什么想法吗?
【问题讨论】:
-
似乎每个
Route都有多个已排序的Steps。但是表ZSTEP是什么?看起来您打算自联接到表Step。也许真正的表被命名为ZSTEP,而您为了这个问题将其名称更改为Step,但忘记更改第二个实例?我是不是想太多了? ;) -
其实ZSTEP是我发的时候忘记修改的真名。