SQL ... Получить значение из поля на основе максимального значения другого поля - PullRequest
0 голосов
/ 01 декабря 2010

Имею сегодня полный ментальный пробел в SQL и не могу этого понять. ColdFusion и MS Access

Я хочу сделать Query of Query в ColdFusion.

Оригинальный запрос:

<cfquery name="myQuery" datasource="xxx">
SELECT Name, ID, tblLoc.Directions, tblLoc.LocationOrder
FROM myTable 
WHERE .....             
ORDER BY tblLoc.LocationOrder
</cfquery>

Я хочу создать еще один запрос из этого запроса, в котором я получу Направления, где LocationOrder - максимум.

Таким образом, если myQuery вернул:

Name       ID        Directions      LocationOrder
AA         10         AAAAAA            1
BB         11         BBBBBB            2

My QoQ would return:

Directions
BBBBBB

Но каждая итерация, казалось бы, простого SQL, который я пробовал, терпит неудачу. Я должен быть полусонный или что-то в этом роде.

<cfquery name="latestDirections" dbtype="query">
SELECT Directions
FROM myQuery
WHERE LocationOrder=(select max(LocationOrder) from myQuery)
</cfquery>

<cfquery name="latestDirections" dbtype="query">
SELECT Directions, MAX(LocationOrder) as maxLocationOrder
FROM get_sel_locations
</cfquery>

Нет ... ни один не сделает это.

Ответы [ 6 ]

1 голос
/ 01 декабря 2010

... Второй «Столбец get_sel_locations.Directions недопустим в предложении списка SELECT, поскольку он не содержится в статистической функции и отсутствует предложение GROUP BY» *

Ошибка довольно очевидна.Вам не хватает предложения GROUP BY.При использовании агрегатов, таких как MAX (), вы должны GROUP результаты по любым неагрегированным столбцам.В этом случае: Направления

SELECT Directions, MAX(LocationOrder) as maxLocationOrder
FROM get_sel_locations
GROUP BY Directions

Обновление Но если вы просто хотите максимум для всего , тогда запрос Yisroel, вероятно, то, что вы хотите.

Обновление Как упоминалось в комментариях, QoQ - это , а не запросов к базе данных.Они поддерживают только функции / синтаксис, перечисленные в документации http://livedocs.adobe.com/coldfusion/8/using_recordsets_3.html

0 голосов
/ 01 декабря 2010

Вы можете сначала сделать QoQ, чтобы получить максимальное местоположение

<cfquery name="maxDirections" dbtype="query">
  SELECT max(LocationOrder) as maxLocation 
  FROM myQuery
</cfquery>

<cfquery name="latestDirections" dbtype="query">
  SELECT Directions
  FROM myQuery
  WHERE LocationOrder = '#maxDirections.maxLocation#'
</cfquery>
0 голосов
/ 01 декабря 2010

Учитывая полученную ошибку, вы можете попробовать это:

-- remove the parentheses
WHERE LocationOrder=select max(LocationOrder) from myQuery           

или

-- use IN instead of equals even though your subquery returns a single scalar value and '=' should be fine.
WHERE LocationOrder  IN (select max(LocationOrder) from myQuery)
0 голосов
/ 01 декабря 2010

Что произойдет, если вы удалите предложение ORDER BY из myQuery? Также скажите, как запрос не выполняется. Какие результаты вы получаете?

0 голосов
/ 01 декабря 2010

Еще одна возможность, если я правильно понимаю вопрос:

ВЫБРАТЬ x ИЗ ИМЕНИ таблицы_ГДЕ y = (ВЫБРАТЬ МАКС (y) ИЗ ИМЕНИ таблицы)

0 голосов
/ 01 декабря 2010
SELECT Name, ID, tblLoc.Directions, tblLoc.LocationOrder 
FROM myTable  
WHERE .....              
ORDER BY tblLoc.LocationOrder DESC LIMIT 1;

должен сделать ты. Ваши указания на макс LocationOrder учтены путем сортировки и ограничения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...