1. ホーム
  2. mysql

[解決済み] MYSQLでMAX(列の値)、PARTITIONで別の列で行を選択するにはどうすればよいですか?

2022-03-19 23:45:41

質問

私のテーブルが

<テーブル イド ホーム 日時 プレーヤー リソース 1 10 04/03/2009 ジョン 399 2 11 04/03/2009 ジュリエット 244 5 12 04/03/2009 ボラット 555 3 10 03/03/2009 ジョン 300 4 11 03/03/2009 ジュリエット 200 6 12 03/03/2009 ボラット 500 7 13 24/12/2008 ボラット 600 8 13 01/01/2009 ボラット 700

各個別に選択する必要があります home の最大値を保持する datetime .

結果はこうなる。

<テーブル イド ホーム 日時 プレーヤー リソース 1 10 04/03/2009 ジョン 399 2 11 04/03/2009 ジュリエット 244 5 12 04/03/2009 ボラット 555 8 13 01/01/2009 ボラット 700

試してみました。

-- 1 ..by the MySQL manual: 

SELECT DISTINCT
  home,
  id,
  datetime AS dt,
  player,
  resource
FROM topten t1
WHERE datetime = (SELECT
  MAX(t2.datetime)
FROM topten t2
GROUP BY home)
GROUP BY datetime
ORDER BY datetime DESC

うまくいきません。データベースには187行ありますが、結果セットには130行あります。 結果には home .

-- 2 ..join

SELECT
  s1.id,
  s1.home,
  s1.datetime,
  s1.player,
  s1.resource
FROM topten s1
JOIN (SELECT
  id,
  MAX(datetime) AS dt
FROM topten
GROUP BY id) AS s2
  ON s1.id = s2.id
ORDER BY datetime 

いや すべてのレコードを与える。

-- 3 ..something exotic: 

様々な結果とともに。

解決方法は?

あと少しです。 必要なのは、ホームとその最大の日付時刻の両方を選択し、それから topten テーブルの両方のフィールドを使用します。

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