ホームページ > データベース > mysql チュートリアル > mysqlの各ホームの最大データタイムで行を選択する方法は?

mysqlの各ホームの最大データタイムで行を選択する方法は?

Linda Hamilton
リリース: 2025-01-25 06:38:09
オリジナル
246 人が閲覧しました

How to SELECT Rows with the MAX Datetime for Each Home in MySQL?

mysql:各グループの最大データタイムで行を選択する

このガイドは、MySQLテーブル内の個別の各グループの最大データタイム値を含む行を効率的に取得する方法を示しています。 これは一般的なSQLの課題であり、多くの場合、サブクエリや窓の関数を含む。

シナリオ:

さまざまな家でのテーブル(

)を追跡するプレーヤーのリソースの使用を想像してください:TopTen

<code class="language-sql">CREATE TABLE TopTen (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  home INT UNSIGNED NOT NULL,
  datetime DATETIME NOT NULL,
  player VARCHAR(6) NOT NULL,
  resource INT NOT NULL
);</code>
ログイン後にコピー
目標は、各

について、その最新のレコードからのhomeおよびdatetime情報を含む最新の(player)エントリを含むレコードを見つけることです。 resource

非効率的なアプローチ(およびなぜ失敗するのか):

および

は、

がデータを集約し、GROUP BYのような非組織化された列を失うため、直接動作しません。 サブクエリを使用して各家の最大の日付を見つけてから、元のテーブルに戻ることで、しばしば誤った結果または不完全な結果につながることがよくあります。 MAX()GROUP BY効果的な解決策:player

最も効率的なソリューションは、サブクエリで自己結合を活用します:

このクエリは次のとおりです

<code class="language-sql">SELECT tt.*
FROM TopTen tt
INNER JOIN (
    SELECT home, MAX(datetime) AS MaxDateTime
    FROM TopTen
    GROUP BY home
) groupedtt ON tt.home = groupedtt.home AND tt.datetime = groupedtt.MaxDateTime;</code>
ログイン後にコピー
subquery():

この内部クエリは、各

の最大
    を見つけ、結果を
  1. でグループ化します groupedtt結合:datetime外側クエリは、サブクエリの結果とともに元のテーブル(homehomeとしてエイリアス)に結合します。
  2. 条件により、最終結果に
  3. と最大の両方に一致する行のみが保証されます。 このメソッドにより、元のテーブルからのすべての列(TopTenおよびttを含む)が、各JOINの最大homeを表す行に対して返されることを保証します。 これにより、データの損失が回避され、必要な完全な情報が提供されます。

以上がmysqlの各ホームの最大データタイムで行を選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート