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

Função MySQL Max misturando linhas


Você precisa de um GROUP BY cláusula com o agregado MAX() . O MySQL permite que você o omita (onde outros RDBMS reportariam erros), mas com resultados indeterminados, que você está vendo. Isso pode ser tratado juntando-se a uma subconsulta que retorna o rev agrupado por id .
SELECT 
  r.id,
  r.state,
  maxrev.rev
FROM
  VIEW_data r
  /* INNER JOIN against subquery which returns MAX(rev) per id only */
  JOIN (
    SELECT id, MAX(rev) AS rev
    FROM VIEW_data GROUP BY id
  /* JOIN is on both id and rev to pull the correct value for state */
  ) maxrev  ON r.id = maxrev.id AND r.rev = maxrev.rev
WHERE r.id = 1

http://sqlfiddle.com/#!2/4f651/8

O acima retornará o máximo rev valor para qualquer id . Se você tem certeza você só precisa de uma linha filtrada pelo WHERE cláusula em vez da MAX() por grupo, veja a outra resposta que usa ORDER BY &LIMIT .