Nếu bạn muốn id
cuối cùng cho mỗi asker
, thì bạn nên sử dụng một hàm tổng hợp:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Lý do tại sao bạn nhận được kết quả bất thường là do MySQL sử dụng một phần mở rộng cho GROUP BY
điều này cho phép các mục trong danh sách chọn không được tổng hợp và không được đưa vào mệnh đề GROUP BY. Tuy nhiên, điều này có thể dẫn đến kết quả không mong muốn vì MySQL có thể chọn các giá trị được trả về. (Xem Tiện ích mở rộng MySQL cho GROUP BY
)
Từ MySQL Docs:
Bây giờ, nếu bạn có các cột khác mà bạn cần trả lại từ bảng, nhưng không muốn thêm chúng vào GROUP BY
do kết quả không nhất quán mà bạn có thể nhận được, khi đó bạn có thể sử dụng một truy vấn con để làm như vậy. ( Bản trình diễn
)
select
q.Id,
q.asker,
q.other -- add other columns here
from questions q
inner join
(
-- get your values from the group by
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
) m
on q.id = m.id
order by q.id desc