Du behöver en GROUP BY
sats med aggregatet MAX()
. MySQL tillåter dig att utelämna det (där andra RDBMS skulle rapportera fel) men med obestämda resultat, som du ser. Detta kan hanteras genom att gå med i en underfråga som returnerar den grupperade rev
enligt 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
Ovanstående returnerar max rev
värde för valfritt id
. Om du är säker du behöver bara den ena raden som filtrerats av WHERE
satsen snarare än MAX()
per grupp, titta på det andra svaret som använder ORDER BY
&LIMIT
.