SQL-запрос с вычисленным MIN, запрос другого столбца возвращает все строки

У нас есть запрос:

SELECT ID, MIN(SQRT(POW((100-x),2)) + POW((150-y),2)) AS distance 
FROM cabstands 
GROUP BY ID

узнать ID ближайшей точки к точке 100, 150 в системе координат. Если я не запрашиваю идентификатор и пытаюсь получить только расстояние, запрос возвращает истинное значение. Однако, если я запрашиваю идентификатор (как в приведенном выше запросе), он возвращает все точки из-за GROUP BY. Если я не поставлю GROUP BY, это просто не позволит мне выполнить запрос, сказав:

ID недействителен в списке выбора, так как он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Какое решение моей проблемы. Заранее спасибо.


person Hasan Can Saral    schedule 20.05.2012    source источник
comment
Почему бы не использовать SELECT TOP 1 ... ORDER BY distance ASC?   -  person Ricardo Souza    schedule 20.05.2012
comment
Пожалуйста, пометьте свой вопрос СУБД, которую вы используете. Это MySQL или PostgreSQL?   -  person Branko Dimitrijevic    schedule 20.05.2012
comment
Спасибо за ваши ответы, я уверен, что это сработает. Я дам вам знать. И я пометил свою СУБД, я использую Microsoft SQL Server 2008 с инструментами управления.   -  person Hasan Can Saral    schedule 20.05.2012


Ответы (1)


Вы можете использовать:

SELECT TOP 1 ID, MIN(SQRT(POW((100-x),2)) + POW((150-y),2)) AS distance FROM cabstands GROUP BY ID ORDER BY distance ASC

Или для MySQL:

SELECT ID, MIN(SQRT(POW((100-x),2)) + POW((150-y),2)) AS distance FROM cabstands GROUP BY ID ORDER BY distance ASC LIMIT 1
person Ricardo Souza    schedule 20.05.2012
comment
Большое спасибо, я приму ваш ответ, как только попробую ваше решение, я почти уверен, что оно сработает :) - person Hasan Can Saral; 20.05.2012