Jednoduchým řešením je zabalit dotaz do podvýběru pomocí příkazu ORDER first a použití GROUP BY později :
SELECT * FROM (
SELECT `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails`
ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)
Je to podobné jako při použití spojení, ale vypadá to mnohem lépe.
Použití neagregovaných sloupců v SELECT s klauzulí GROUP BY je nestandardní. MySQL obecně vrátí hodnoty prvního řádku, který najde, a zbytek zahodí. Jakékoli klauzule ORDER BY se budou vztahovat pouze na vrácenou hodnotu sloupce, nikoli na vyřazené.
DŮLEŽITÉ AKTUALIZACE Výběr neagregovaných sloupců v praxi fungoval, ale nemělo by se na něj spoléhat. Podle dokumentace MySQL "toto je užitečné především tehdy, když jsou všechny hodnoty v každém neagregovaném sloupci, který není pojmenován v GROUP BY, pro každou skupinu stejné. Server si může svobodně vybrat libovolnou hodnotu z každé skupiny, takže pokud nejsou stejné, jsou zvolené hodnoty neurčité ."
Ke dni 5.7.5 ONLY_FULL_GROUP_BY je ve výchozím nastavení povolena, takže neagregované sloupce způsobují chyby dotazu (ER_WRONG_FIELD_WITH_GROUP)
Jak uvádí @mikep níže, řešením je použít ANY_VALUE() od 5.7 a výše
Vizhttp://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/cs/miscellaneous-functions.html#function_any-value