【问题标题】:SQLite -> finding two closest points to two different pointsSQLite -> 找到离两个不同点最近的两个点
【发布时间】: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是我发的时候忘记修改的真名。

标签: sql sqlite


【解决方案1】:

你可能想要

ORDER BY d1, d2

作为您的 order by 子句。到底是怎么回事?

【讨论】:

  • 这是一个断言失败。实际上 ORDER BY d1, d2 进行二次排序。我想要的是距离第一点最近的点和距离第二点最近的点。
  • 断言失败:我对这些一无所知,我必须承认。您可以扩展 ORDER BY 子句并使用 ORDER BY d1 + d2;或按 myfunc (d1, d2) 排序;如果这有任何帮助。你不能有两个 ORDER BY 子句。
  • 抱歉不是断言失败。那是 C 错误...实际上我有点想要 d1 和 d2 的最小值。我正在尝试一种不同的方法,所以我会结束这个问题。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2016-03-03
  • 2022-01-14
  • 2019-06-29
相关资源
最近更新 更多