Du skal bruge en GROUP BY
klausul med den samlede MAX()
. MySQL tillader dig at udelade det (hvor andre RDBMS ville rapportere fejl), men med ubestemte resultater, som du ser. Dette kan håndteres ved at joine en underforespørgsel, som returnerer den grupperede rev
efter 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
Ovenstående vil returnere maks. rev
værdi for enhver id
. Hvis du er sikker du behøver kun den ene række som filtreret af WHERE
klausul i stedet for MAX()
pr. gruppe, se på det andet svar, som gør brug af ORDER BY
&LIMIT
.