Não podemos referenciar o resultado de uma função agregada (por exemplo
MAX()
) em um WHERE
cláusula do mesmo SELECT
. O padrão normativo para resolver esse tipo de problema é usar uma visualização em linha, algo assim:
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
Esta é apenas uma maneira de obter o resultado especificado. Existem várias outras abordagens para obter o mesmo resultado, e algumas delas podem ser muito menos eficientes do que outras. Outras respostas demonstram essa abordagem:
WHERE t.id = (SELECT MAX(id) FROM ... )
Às vezes, a abordagem mais simples é usar um ORDER BY com um LIMIT. (Observe que esta sintaxe é específica do MySQL)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
Observe que isso retornará apenas uma linha; portanto, se houver mais de uma linha com o mesmo valor de id, isso não retornará todas elas. (A primeira consulta retornará TODAS as linhas que possuem o mesmo valor de id.)
Essa abordagem pode ser estendida para obter mais de uma linha, você pode obter as cinco linhas que possuem os valores de id mais altos alterando-a para
LIMIT 5
. Observe que o desempenho dessa abordagem depende particularmente da disponibilidade de um índice adequado (ou seja, com
id
como PRIMARY KEY ou como a coluna principal em outro índice.) Um índice adequado melhorará o desempenho das consultas usando todas essas abordagens.