Potrzebujesz GROUP BY klauzula z agregacją MAX() . MySQL pozwala to pominąć (gdzie inne RDBMS zgłaszałyby błędy), ale z nieokreślonymi wynikami, które widzisz. Można to obsłużyć, dołączając do podzapytania, które zwraca zgrupowane rev na 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
https://sqlfiddle.com/#!2/4f651/8
Powyższe zwróci max rev wartość dla dowolnego id . Jeśli jesteś pewny potrzebujesz tylko jednego wiersza przefiltrowanego przez WHERE klauzula zamiast MAX() na grupę, spójrz na drugą odpowiedź, która wykorzystuje ORDER BY &LIMIT .