Hai bisogno di un GROUP BY
clausola con l'aggregato MAX()
. MySQL ti consente di ometterlo (dove altri RDBMS segnalerebbero errori) ma con risultati indeterminati, che stai vedendo. Questo può essere gestito unendosi a una sottoquery che restituisce il gruppo rev
per 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
Quanto sopra restituirà il massimo rev
valore per qualsiasi id
. Se sei certo hai solo bisogno di una riga filtrata da WHERE
clausola anziché MAX()
per gruppo, guarda l'altra risposta che utilizza ORDER BY
&LIMIT
.