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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-25 06:18:09957ブラウズ

How to Select Rows with the Maximum Datetime for Each Home in MySQL?
mysqlで、別のグループに従って最大値を持つ行を選択します

質問ステートメント

次のプレーヤーパフォーマンステーブルを検討してください:

目標は、それぞれの異なるホームコラムの行を取得し、各家の最大値を考慮することです。さらに、結果には他の列(プレーヤーなど)を含める必要があります。

<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>
例データの例

予想される結果

<code class="language-sql">INSERT INTO TopTen
  (id, home, `datetime`, player, resource)
VALUES
  (1, 10, '2009-04-03', 'john', 399),
  (2, 11, '2009-04-03', 'juliet', 244),
  (5, 12, '2009-04-03', 'borat', 555),
  (3, 10, '2009-03-03', 'john', 300),
  (4, 11, '2009-03-03', 'juliet', 200),
  (6, 12, '2009-03-03', 'borat', 500),
  (7, 13, '2008-12-24', 'borat', 600),
  (8, 13, '2009-01-01', 'borat', 700)
;</code>

solution

次のクエリは、必要な結果を提供します:
<code>id  home    datetime       player  resource
1   10     2009-04-03     john    399
2   11     2009-04-03     juliet  244
5   12     2009-04-03     borat   555
8   13     2009-01-01     borat   700</code>

このクエリは、次の手順を実行します:

Toptenテーブル(エイリアスTT)からすべての列を選択します。

TTとサブクエリ(Alias Groupttt)と内部接続と、各異なるホーム値の最大値を取得するサブクエリ検索を組み合わせます。
<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>

接続条件により、2つのテーブルのホーム値とドテタイム値を確実に一致させます。

    結果には、Toptenテーブルからすべての列が含まれています。
  1. 注:日付形式を修正して、MySQLを正しく分析できるように標準
  2. 形式を満たすようにしました。 これにより、クエリのロジックは変更されませんが、データの正確性のみを確認します。

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

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