У меня есть стол, заполненный автобусными остановками. Каждая остановка имеет 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))
Я пытался сделать ВНУТРЕННЕЕ СОЕДИНЕНИЕ, но не повезло (я заменил формулу расстояния):
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)
Но я продолжаю получать Неизвестный столбец «distance1» в «on оговорке» error.
Я рассмотрел другие варианты, но тот факт, что расстояние вычисляется в запросе, кажется, действительно нарушает условия сделки. Какие у меня варианты? Мне нужно, чтобы мой запрос был максимально быстрым.