Едно просто решение е да обвиете заявката в подселекция с израза ORDER first и прилагане на GROUP BY по-късно :
SELECT * FROM (
SELECT `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails`
ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)
Това е подобно на използването на присъединяването, но изглежда много по-добре.
Използването на неагрегирани колони в SELECT с клауза GROUP BY е нестандартно. MySQL обикновено връща стойностите на първия ред, който намира, и отхвърля останалите. Всички клаузи ORDER BY ще се прилагат само към върнатата стойност на колоната, а не към отхвърлените.
ВАЖНА АКТУАЛИЗАЦИЯ Изборът на неагрегирани колони е работил на практика, но не трябва да се разчита на него. Съгласно документацията на MySQL "това е полезно преди всичко, когато всички стойности във всяка неагрегирана колона, която не е наименувана в GROUP BY, са еднакви за всяка група. Сървърът е свободен да избира всяка стойност от всяка група, така че освен ако не са еднакви, избраните стойности са неопределени ."
От 5.7.5 ONLY_FULL_GROUP_BY е активиран по подразбиране, така че колоните, които не са обобщени, причиняват грешки в заявката (ER_WRONG_FIELD_WITH_GROUP)
Както @mikep посочва по-долу, решението е да използвате ANY_VALUE() от 5.7 и по-нови версии
Вижтеhttp://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