Estoy desarrollando una aplicación en Android para mostrar rutas de autobús desde mi ciudad natal, tengo problemas con una consulta, tengo dos tablas en mi aplicación como se muestra a continuación:
tabla de INFORMACIÓN
ID | NAME | DIRECTION
--------------------------
1 | BUS 1 | departure
2 | BUS 1 | return
3 | BUS 2 | departure
4 | BUS 2 | return
5 | BUS 3 | departure
6 | BUS 3 | return
tabla COORDENADAS
ID | INFORMATION_ID | LAT | LON |
-------------------------------------------------
1 | 1 | 19.171184 | -96.174029 |
2 | 1 | 19.171021 | -96.173991 |
3 | 1 | 19.171002 | -96.173979 |
5 | 2 | 19.193244 | -96.138732 |
6 | 2 | 19.193368 | -96.138957 |
7 | 2 | 19.193332 | -96.138741 |
Estoy tratando de mostrar rutas de autobuses cercanas dentro del rango de 500 my realmente puedo hacerlo con esta consulta
SELECT DISTINCT NAME,
((example.lat - COORDINATES.LAT) * (example.lat - COORDINATES.LAT) + (example.lon - COORDINATES.LON) * (example.lon - COORDINATES.LON)) AS DISTANCE
FROM COORDINATES
INNER JOIN INFORMATION
ON COORDINATES.INFORMATION_ID=INFORMATION.ID
WHERE DISTANCE < 0.000023544 //supposedly 500 m, im not sure
ORDER BY DISTANCE
Pero el problema es que tengo valores repetidos enel campo NOMBRE porque tengo varios puntos de latlon de las rutas de autobús que están dentro del rango, Solo necesito devolver la distancia mínima con el nombre correspondiente de esta manera:
ID | NAME | DISTANCE
---------------------
1 | BUS 1 | 1.349834...
3 | BUS 2 | 1.367033...
Le agradeceré cualquier orientación para resolver este problema, gracias.
Respuestas
0 para la respuesta № 1Vea si esto ayuda a obtener la distancia más corta.
SELECT NAME, MIN(DISTANCE) FROM
(
SELECT NAME,
((19.171150 - COORDINATES.LAT) * (19.171184 - COORDINATES.LAT) +
(-96.173990 - COORDINATES.LON) * (-96.173990 - COORDINATES.LON)) AS DISTANCE
FROM COORDINATES
INNER JOIN INFORMATION
ON COORDINATES.INFORMATION_ID=INFORMATION.ID
WHERE DISTANCE < 0.000023544
)
GROUP BY NAME
http://sqlfiddle.com/#!7/2e1ea/4