ホームページ >データベース >mysql チュートリアル >MySQL で名前でグループ化する前に日付と時刻で並べ替えるにはどうすればよいですか?

MySQL で名前でグループ化する前に日付と時刻で並べ替えるにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 22:59:29553ブラウズ

How to Order by Date and Time Before Grouping by Name in MySQL?

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 操作を実行します。

このメソッドを使用すると、GROUP BY が実行されます。が順序付けされた結果セットに適用され、日付と時刻のフィールドに関係なく、最も古い名前が最初に取得されるようになります。

以上がMySQL で名前でグループ化する前に日付と時刻で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。