Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Função MAX na cláusula where mysql


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.