MySQL の GROUP BY 名の前の ORDER BY 日付と時刻
MySQL では、ORDER BY 句は GROUP BY 句の前に適用されます。ただし、特定のシナリオでは、ユーザーは名前列に対して GROUP BY を実行する前に、日付と時刻のフィールドでデータを並べ替える必要があります。
次の表について考えてみましょう。
name | date | time |
---|---|---|
tom | 2011-07-04 | 01:09:52 |
tom | 2011-07-04 | 01:09:52 |
mad | 2011-07-04 | 02:10:53 |
mad | 2009-06-03 | 00:01:01 |
目的は、次のことです。最も古い名前を最初に取得します。次のクエリは失敗します:
SELECT * ORDER BY date ASC, time ASC GROUP BY name
これは、ORDER BY の前に GROUP BY が適用され、並べ替え前に同じ名前のレコードがグループ化されるためです。その結果、期待した順序が達成されません。
解決策:
この問題を解決するには、次のアプローチを利用できます:
SELECT * FROM ( SELECT * FROM table_name ORDER BY date ASC, time ASC ) AS sub GROUP BY name
このクエリ内:
このメソッドを使用すると、GROUP BY が実行されます。が順序付けされた結果セットに適用され、日付と時刻のフィールドに関係なく、最も古い名前が最初に取得されるようになります。
以上がMySQL で名前でグループ化する前に日付と時刻で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。