簡単な解決策は、ORDERステートメント first を使用して、クエリを副選択にラップすることです。 GROUPBY後でを適用します :
SELECT * FROM (
SELECT `timestamp`, `fromEmail`, `subject`
FROM `incomingEmails`
ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)
これは結合の使用に似ていますが、見た目がはるかに良くなります。
GROUPBY句を指定したSELECTで非集計列を使用することは非標準です。 MySQLは通常、最初に見つけた行の値を返し、残りを破棄します。 ORDER BY句は、返された列の値にのみ適用され、破棄された列の値には適用されません。
重要な更新 実際に機能するために使用される非集計列の選択は、信頼されるべきではありません。 MySQLドキュメント による 「これは主に、GROUPBYで指定されていない各非集計列のすべての値が各グループで同じである場合に役立ちます。サーバーは任意の値を自由に選択できます 各グループからのものであるため、同じでない限り、選択される値は不確定です 。"
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<を参照してください。 / a> 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