Итак, у меня есть 2 таблицы:
route(#id)
step(#id,route_id,lat,lng,sequence_order)
И 2 GPS-координаты: M1 (широта, lng1), M2 (широта, lng2).
Итак, я хочу найти все маршруты, которые по крайней мере на один шаг ближе, чем 1,0 миля от каждого из 2-х координат GPS в порядке возрастания последовательности.
Так что, если я найду маршрут № 25, который имеет шаг S1 в 0,4 милях от M1 и шаг S2 в 0,2 милях от M2, он должен совпадать, только если порядковый номер S1 ниже порядкового номера S2. Имеет ли это смысл?
Предполагая, что я добавил функцию для вычисления расстояния, я могу сделать это довольно легко с помощью этого запроса:
SELECT r.id,s1.lat,s1.lng,s2.lat,s2.lng,distance(s1.lat,s1.lng,lat1,lng1) as d1,distance(s2.lat,s2.lng,lat2,lng2) as d2 FROM route r
INNER JOIN step s1 ON r.id = s1.route_id
INNER JOIN step s2 ON r.id = s2.route_id AND s1.sequence_order < s2.sequence_order
WHERE d1<1.0
AND d2<1.0
Я хотел бы иметь поведение, состоящее в том, чтобы сохранять только самые близкие координаты (s1.lat, s1.lng) и (s2.lat, s2.lng) моих точек. Поэтому я подумал, что могу сделать что-то вроде этого:
ORDER BY d1
ORDER BY d2
GROUP BY r.id
но он просто падает.
Есть идеи?