Solusi sederhana adalah dengan membungkus kueri menjadi subpilihan dengan pernyataan ORDER pertama dan menerapkan GROUP BY nanti :
SELECT * FROM (
SELECT `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails`
ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)
Ini mirip dengan menggunakan join tetapi terlihat jauh lebih bagus.
Menggunakan kolom non-agregat dalam SELECT dengan klausa GROUP BY tidak standar. MySQL umumnya akan mengembalikan nilai dari baris pertama yang ditemukannya dan membuang sisanya. Setiap klausa ORDER BY hanya akan berlaku untuk nilai kolom yang dikembalikan, bukan yang dibuang.
PEMBARUAN PENTING Memilih kolom non-agregat yang digunakan untuk bekerja dalam praktik tetapi tidak boleh diandalkan. Berdasarkan dokumentasi MySQL "ini berguna terutama ketika semua nilai di setiap kolom non-agregat yang tidak disebutkan dalam GROUP BY adalah sama untuk setiap grup. Server bebas memilih nilai apa pun dari setiap grup, jadi kecuali sama, nilai yang dipilih tidak dapat ditentukan ."
Mulai 5.7.5 ONLY_FULL_GROUP_BY diaktifkan secara default sehingga kolom non-agregat menyebabkan kesalahan kueri (ER_WRONG_FIELD_WITH_GROUP)
Seperti yang ditunjukkan @mikep di bawah, solusinya adalah menggunakan NILAI_APA SAJA() dari 5.7 ke atas
Lihathttp://www.cafewebmaster.com/mysql-order-sort-group https://dev.mysql.com/doc /refman/5.6/en/group-by-handling.html https://dev.mysql.com/doc /refman/5.7/en/group-by-handling.html https://dev.mysql.com /doc/refman/5.7/en/miscellaneous-functions.html#function_any-value