Подтвердить что ты не робот

Функция MAX в том, где предложение mysql

Как я могу использовать функцию max() в where, где запрос mysql, я пытаюсь:

 select firstName,Lastname,MAX(id) as max where id=max;

это дает мне ошибку:

Unknown column 'max' in 'where clause'

Любая помощь? Спасибо заранее.

4b9b3361

Ответ 1

Вы не можете ссылаться на результат агрегатной функции (например, MAX()) в предложении WHERE того же запроса.

Нормативным шаблоном для решения этого типа проблемы является использование встроенного представления, что-то вроде этого:

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
  JOIN ( SELECT MAX(mx.id) AS max_id
           FROM mytable mx
       ) m
    ON m.max_id = t.id

Это всего лишь один способ получить заданный результат. Существует несколько других подходов к получению одного и того же результата, и некоторые из них могут быть гораздо менее эффективными, чем другие. Другие ответы демонстрируют такой подход:

 WHERE t.id = (SELECT MAX(id) FROM ... )

Иногда самый простой подход - использовать ORDER BY с LIMIT. (Обратите внимание, что этот синтаксис специфичен для MySQL)

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
 ORDER BY t.id DESC
 LIMIT 1

Обратите внимание, что это вернет только одну строку; поэтому, если имеется более одной строки с одинаковым значением id, то это не будет возвращать все из них. (Первый запрос вернет ВСЕ строки, которые имеют одинаковое значение id.)

Этот подход может быть расширен, чтобы получить более одной строки, вы можете получить пять строк с наивысшими значениями id, изменив их на LIMIT 5.

Обратите внимание, что производительность этого подхода особенно зависит от доступного подходящего индекса (т.е. с id как PRIMARY KEY или в качестве ведущего столбца в другом индексе.) Подходящий индекс улучшит производительность запросов, используя все эти подходы.

Ответ 2

Используйте подзапрос:

SELECT row  FROM table  WHERE id=(
    SELECT max(id) FROM table
)

Примечание: идентификатор должен быть уникальным, иначе возвращаются несколько строк

Ответ 3

SELECT firstName, Lastname, MAX(id) as max WHERE YOUR_CONDITIONS_HERE HAVING id=max(id) 

Ответ 4

Некоторые версии Mysql запрещают "ограничение" внутри подбора select. Мой ответ вам (и мне в будущем) было бы использовать группы

select firstName,Lastname,id 
where {whatever}
group by id
having max(id)

Это позволяет вам возвращать все, что вы хотите, в области выбора, не имея агрегированного поля.

Ответ 5

Синтаксис, который вы использовали, неверен. Запрос должен выглядеть примерно так:

SELECT column_name(s) FROM tablename WHERE id = (SELECT MAX(id) FROM tablename)

Ответ 6

Вы хотите, чтобы имя и фамилия строки с наибольшим id?

Если да (и вам не было предложения FROM):

SELECT firstname, lastname, id
FROM foo
ORDER BY id DESC
LIMIT 1;

Ответ 7

Этот запрос должен вернуть вам нужные данные. Замените foo именем таблицы, которое вы используете.

SQL-запрос:

select firstName,Lastname, id 
from foo 
having max(id) = id 

Ответ 8

В качестве псевдонима для столбца используется слово max. Попробуйте:

MAX(id) as mymax ... WHERE ID - mymax