質問

バス停で埋められたテーブルがあります。各停止は、 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)を意味するため、何も平方根を取る必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top