Necesitas un GROUP BY
cláusula con el agregado MAX()
. MySQL le permite omitirlo (donde otros RDBMS informarían errores) pero con resultados indeterminados, que está viendo. Esto se puede manejar uniéndose a una subconsulta que devuelve el 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
Lo anterior devolverá el máximo rev
valor para cualquier id
. Si está seguro solo necesita una fila filtrada por WHERE
cláusula en lugar de MAX()
por grupo, mira la otra respuesta que hace uso de ORDER BY
&LIMIT
.