2012-05-20 2 views
0

У нас есть запрос:SQL запросы с расчетным MIN, запрашивающая колонкой возвращают все строки

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

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

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

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

+1

Почему бы не использовать 'ВЫБРАТЬ TOP 1 ... ORDER BY расстояние ASC'? – rcdmk

+0

Пожалуйста, отметьте свой вопрос с помощью СУБД, которую вы используете. Возможно, это MySQL или PostgreSQL? –

+0

Спасибо за ваши ответы, я уверен, что он будет работать таким образом. Я дам вам знать. И я пометил свои СУБД, я запускаю Microsoft SQL Server 2008 с инструментами управления. –

ответ

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 
+0

Большое вам спасибо, я приму свой ответ, как только попробую ваше решение, я уверен, что он будет работать :) –

Смежные вопросы