Domanda

Ho un tavolo pieno di fermate degli autobus.Ogni arresto ha un line_id , una direzione e coordinate (Lat e GNL).

Voglio che la mia query restituisca la fermata più vicina per ogni riga / direzione.

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

Quella query raggruppa le mie fermate come previsto.È l'altra parte che è Tricker (tornando la fermata più vicina), dal momento che sto calcolando la distanza sulla mosca usando (ho sostituito alcune variabili qui)

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

Ho provato a fare un join interiore ma senza fortuna (ho sostituito la formula della distanza):

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)
.

Ma continuo a ricevere una colonna sconosciuta "Distanza 'Distance1' in" On Clause ' Errore.

Ho esaminato altre opzioni, ma il fatto che la distanza viene calcolata all'interno della query sembra essere un vero eluvio.Quali sono le mie opzioni? Ho bisogno che la mia query sia il più veloce possibile.

È stato utile?

Soluzione

Non testato:

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 (anche non testato):

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)
.

Non è possibile utilizzare l'alias distanza1 nella tua dove o sulla clausola a meno che non sia in una sottoquery come il primo esempio.

Inoltre, nell'interesse di accelerare i tuoi calcoli, non è necessario prendere la radice quadrata di nulla perché sqrt (x)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top