2016-04-11 3 views
1

Я хочу получить минимум от «динамического» значения, определенного функцией DISTANCE_BETWEEN.MySQL получает минимум от функции

SELECT d.id 
FROM (SELECT id , DISTANCE_BETWEEN (Latitude,Longitude,43.2560997009,-2.9078400135) AS distance FROM Locations) AS D 
WHERE MIN(d.distance); 

Не можете получить его прямо

Invalid use of group function 

ответ

1

Вот еще один способ использования order by

SELECT D.id 
FROM (SELECT id , DISTANCE_BETWEEN (Latitude,Longitude,43.2560997009,-2.9078400135) AS distance FROM Locations) AS D 
ORDER BY distance 
LIMIT 1 
+0

Оба ответа работают, но этот кажется более простым. Благодарю. –

2
SELECT id 
FROM Locations 
WHERE DISTANCE_BETWEEN (Latitude,Longitude,43.2560997009,-2.9078400135) = 
    (SELECT MIN(DISTANCE_BETWEEN (Latitude,Longitude,43.2560997009,-2.9078400135)) FROM Locations) 
1

Один метод только для перемещения функции в пункте order by:

SELECT D.id 
FROM locations 
ORDER BY DISTANCE_BETWEEN(Latitude, Longitude, 43.2560997009, -2.9078400135) 
LIMIT 1; 

Это самый простой способ выражения логики (при некоторых обстоятельствах он может быть не самым эффективным).

+0

Почему это не должно быть эффективным? –

+0

@ElDude. , , Это может рассчитать расстояние несколько раз для данной строки. Если подзапрос материализуется, то расстояние вычисляется только один раз. –