Vous avez besoin d'un GROUP BY
clause avec l'agrégat MAX()
. MySQL vous permet de l'omettre (là où d'autres RDBMS signaleraient des erreurs) mais avec des résultats indéterminés, ce que vous voyez. Cela peut être géré en se joignant à une sous-requête qui renvoie le rev
groupé par 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
Ce qui précède renverra le max rev
valeur pour tout id
. Si vous êtes certain vous n'avez besoin que d'une ligne filtrée par WHERE
clause plutôt que MAX()
par groupe, regardez l'autre réponse qui utilise ORDER BY
&LIMIT
.