Bạn cần một GROUP BY
mệnh đề với MAX()
tổng hợp . MySQL cho phép bạn bỏ qua nó (trong đó các RDBMS khác sẽ báo lỗi) nhưng với kết quả không xác định mà bạn đang thấy. Điều này có thể được xử lý bằng cách kết hợp với một truy vấn con trả về rev
được nhóm lại 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
Ở trên sẽ trả về rev
tối đa giá trị cho bất kỳ id
nào . Nếu bạn chắc chắn bạn chỉ cần một hàng như được lọc bởi WHERE
thay vì mệnh đề MAX()
mỗi nhóm, hãy xem câu trả lời khác sử dụng ORDER BY
&LIMIT
.