Pregunta

Tengo una mesa llena de paradas de autobús.Cada parada tiene una line_id , una dirección y coordenadas (lat y lng).

Quiero que mi consulta devuelva la parada más cercana para cada línea / dirección.

SELECT * from stops GROUP BY CONCAT(line_id, direction)

que los grupos de consulta My se detienen como se esperaba.Es la otra parte que es un enguantador (devolviendo la parada más cercana), ya que estoy calculando la distancia sobre la marcha utilizando (reemplazo algunas variables aquí)

SQRT(POW(111.1819*(45.54182-lat),2)+POW(64.7938007101048*(-73.62934-lng),2))

He intentado hacer una unión interna, pero no tengo suerte (he reemplazado la fórmula de distancia):

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)

Pero sigo recibiendo una columna desconocida "de EM> a distancia1 'en el error' en la cláusula '.

He examinado otras opciones, pero el hecho de que la distancia se calcula dentro de la consulta parece ser un verdadero repartidor.¿Cuáles son mis opciones? necesito que mi consulta sea lo más rápida posible.

¿Fue útil?

Solución

Sin fe:

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)

o (también no probado):

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)

No puede usar la distancia de alias1 en su cláusula donde está o en su parte, a menos que esté en una subconsia como el primer ejemplo.

Además, en interés de acelerar sus cálculos, no necesita tomar la raíz cuadrada de nada porque SQRT (X)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top