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>
この内部クエリは、各
の最大groupedtt
結合:datetime
外側クエリは、サブクエリの結果とともに元のテーブル(home
home
としてエイリアス)に結合します。 TopTen
およびtt
を含む)が、各JOIN
の最大home
を表す行に対して返されることを保証します。 これにより、データの損失が回避され、必要な完全な情報が提供されます。以上がmysqlの各ホームの最大データタイムで行を選択する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。