Нуждаете се от GROUP BY
клауза с агрегата MAX()
. MySQL ви позволява да го пропуснете (където други RDBMS биха докладвали за грешки), но с неопределени резултати, които виждате. Това може да се справи чрез присъединяване към подзаявка, която връща групирания rev
за 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
. Ако сте сигурни имате нужда само от единия ред, филтриран от WHERE
клауза, а не MAX()
на група, вижте другия отговор, който използва ORDER BY
&LIMIT
.