1. ホーム
  2. mysql

グループ化されたMySQLデータから最新の日付を取得する

2023-09-24 03:36:21

質問

私のデータベースには以下のデータがあります。

|NO | model | date     | 
+---+-------+----------+
|1  | bee   |2011-12-01|
|2  | bee   |2011-12-05|
|3  | bee   |2011-12-12|
|4  | tar   |2011-12-13|

各モデルグループの最新日付を取得したい。

| model | date     | 
+-------+----------+
| bee   |2011-12-12|
| tar   |2011-12-13|

試してみました。

SELECT model, date 
FROM doc
WHERE date ........????? //what is the next?
GROUP BY model

どのように解決するのですか?

各モデルの最大日付を調べているのでしょうか?

SELECT model, max(date) FROM doc
GROUP BY model

テーブル全体の最大日付に一致する全てのモデルを探している場合...

SELECT model, date FROM doc
WHERE date IN (SELECT max(date) FROM doc)

[追加されました。]

各モデルグループ内の最新日付に一致するすべてのレコードから詳細を表示したい方向け(OPで求められているようなサマリーデータではありません)。

SELECT d.model, d.date, d.color, d.etc FROM doc d
WHERE d.date IN (SELECT max(d2.date) FROM doc d2 WHERE d2.model=d.model)

MySQL 8.0 以降では OVER 節をサポートし、より大きなデータセットに対して少し速く同じ結果を生成します。

SELECT model, date, color, etc FROM (SELECT model, date, color, etc, 
  max(date) OVER (PARTITION BY model) max_date FROM doc) predoc 
WHERE date=max_date;