バス停でいっぱいのテーブルがあります。各停留所には、line_id、方向、および座標(緯度と経度) があります。
クエリで各行/方向の最寄りの停留所を返したいと思っています。
SELECT * from stops GROUP BY CONCAT(line_id, direction)
そのクエリは、期待どおりに停車地をグループ化します。これはトリッキーな他の部分です (最寄りの停留所を返す)。なぜなら、私は (ここでいくつかの変数を置き換えました) を使用してその場で距離を計算しているためです。
SQRT(POW(111.1819*(45.54182-lat),2)+POW(64.7938007101048*(-73.62934-lng),2))
INNER JOIN を実行しようとしましたが、うまくいきませんでした (距離式を置き換えました):
SELECT distance-formula as distance1, s1.* from stops s1 INNER JOIN
(SELECT MIN(distance-formula) AS distance2, line_id, direction FROM stops GROUP BY CONCAT(line_id, direction)) s2
ON (s1.line_id = s2.line_id AND s1.direction = s2.direction AND s1.distance1 = s2.distance2)
しかし、「on clause」エラーで不明な列「distance1」が引き続き発生します。
私は他のオプションを調べましたが、距離がクエリ内で計算されるという事実は、本当の契約破りのようです. 私のオプションは何ですか?クエリをできるだけ速くする必要があります。