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
.