【问题标题】:SQLite : finding a function's minimum valuesSQLite:查找函数的最小值
【发布时间】:2010-07-27 23:57:05
【问题描述】:

我有那些桌子

Node (#id, route_id, lat, lng)

路线(#id)

我有四个输入值:$lat1、$lng1、$lat2、$lng2,分别代表 2 个 GPS 坐标 GPS1 和 GPS2。 我还有一个添加到数据库中的距离函数:distance(lat1, lng1, lat2, lng2)

我正在寻找的请求将为我提供最接近 GPS1 的点,以及每条路线最接近 GPS2 的点。 所以我想它应该像这样开始:

SELECT r.id, n1.lat, n1.lng, n2.lat, n2.lng
FROM Node n1, Node n2
JOIN Route r ON n1.route_id = r.id AND n2.route_id = r.id

我尝试添加

WHERE distance(n1.lat,n1.lng,$lat1,$lng1) = MIN (distance(n1.lat,n1.lng,$lat1,$lng1))
AND distance(n2.lat,n2.lng,$lat2,$lng2) = MIN (distance(n2.lat,n2.lng,$lat2,$lng2))

但它会抛出这个错误:

"misuse of aggregate function MIN()"

我也认为我可以使用

SELECT r.id, n1.lat, n1.lng, n2.lat, n2.lng, distance(n1.lat,n1.lng,$lat1,$lng1) AS d1, distance(n2.lat,n2.lng,$lat2,$lng2) AS d2
FROM Node n1, Node n2
JOIN Route r ON n1.route_id = r.id AND n2.route_id = r.id
GROUP BY r.id

对于 n1.lat、n1.lng、d1 列按 d1 排序,对于 n2.lat、n2.lng、d2 列按 d2 排序,但我不知道该怎么做。

有什么想法吗?

【问题讨论】:

    标签: sql sqlite request geography gis


    【解决方案1】:

    您需要执行关联查询:

    SELECT r.id, n1.lat, n1.lng, n2.lat, n2.lng
    FROM Node n1, Node n2
    JOIN Route r ON n1.route_id = r.id AND n2.route_id = r.id
    WHERE distance(n1.lat,n1.lng,$lat1,$lng1) = (
                                                 SELECT MIN (distance(lat,lng,$lat1,$lng1))
                                                 FROM Node c_n
                                                 WHERE c_n.nid = n1.nid)
    AND distance(n2.lat,n2.lng,$lat2,$lng2) = (
                                                 SELECT MIN (distance(lat,lng,$lat1,$lng1))
                                                 FROM Node c_n
                                                 WHERE c_n.nid = n2.nid)
    

    (在这个猜想我无法测试这个,如果不准确请见谅,但应该很接近。我稍后会检查这个。)

    【讨论】:

    • 嘿,太酷了!我不知道 SQLite 可以做到这些。而且由于我对他们很差,我不敢尝试。我会实现它并让你知道它是否有效
    猜你喜欢
    • 2013-09-28
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    相关资源
    最近更新 更多