Jika Anda ingin id
terakhir untuk setiap asker
, maka Anda harus menggunakan fungsi agregat:
SELECT max(id) as id,
asker
FROM questions
GROUP by asker
ORDER by id DESC
Alasan mengapa Anda mendapatkan hasil yang tidak biasa adalah karena MySQL menggunakan ekstensi ke GROUP BY
yang memungkinkan item dalam daftar pilih untuk tidak digabungkan dan tidak disertakan dalam klausa GROUP BY. Namun ini dapat menyebabkan hasil yang tidak terduga karena MySQL dapat memilih nilai yang dikembalikan. (Lihat Ekstensi MySQL ke GROUP BY
)
Dari Dokumen MySQL:
Sekarang jika Anda memiliki kolom lain yang perlu Anda kembalikan dari tabel, tetapi tidak ingin menambahkannya ke GROUP BY
karena hasil yang tidak konsisten yang bisa Anda dapatkan, maka Anda bisa menggunakan subquery untuk melakukannya. (Demo
)
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