グループを使用した行を使用して、集計関数を持つ
-
14-11-2019 - |
質問
バス停で埋められたテーブルがあります。各停止は、 line_id 、方向、座標(LATとLNG)です。
私のクエリは、行/方向ごとに最も近い停止を返すようにしたいです。
.
SELECT * from stops GROUP BY CONCAT(line_id, direction)
そのクエリグループ私の停止は予想通りに停止します。それは私が飛行中の距離を計算しているので、その他の部分です(私はここにいくつかの変数を置き換えました)
.
SQRT(POW(111.1819*(45.54182-lat),2)+POW(64.7938007101048*(-73.62934-lng),2))
私はインナー加入をしようとしましたが運がなかった(私は距離の数式を置き換えました):
.
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)
しかし、不明列 'DISTRES1' エラーエラーです。
他の選択肢を調べましたが、クエリ内で距離が計算されているという事実は、本物の取引遮断器のようです。私のオプションは何ですか?私は私のクエリができるだけ速くなる必要があります。
解決
未テスト:
SELECT * FROM (SELECT distance-formula as distance1, line_id, direction 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)
.
または(未定義):
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.distance - formula = s2.distance2)
.
最初の例のような副照会で除外されていない限り、ALIAS DISTER1を使用することはできない。
また、計算を高速化することの興味において、SQRT(X)