GROUP BYaggregate を含む句が必要ですMAX()。MySQL では、(他の RDBMS がエラーを報告する場合) これを省略することができますが、結果は不確定であり、表示されています。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
上記はrev、任意の の最大値を返しますid。グループごとではなく、句によってフィルタリングされた1行のみが必要であることが確実な場合は、 &を使用する他の回答を見てください。WHEREMAX()ORDER BYLIMIT