web-dev-qa-db-ja.com

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

データベースに次のデータがあります。

|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
46
nunu

各モデルの最大日付を探していますか?

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

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

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

次のようなサブクエリでmax()を使用してみてください:

SELECT model, date  
FROM doc 
WHERE date in (SELECT MAX(date) from doc GROUP BY model);
12
gprathour

日付を与えるサブクエリ。モデルとリンクしていません。したがって、以下のクエリは問題を解決します。

日付/モデルが重複している場合は、次のクエリで回避できます。

select t.model, t.date
from doc t
inner join (select model, max(date) as MaxDate from doc  group by model)
tm on t.model = tm.model and t.date = tm.MaxDate
9

これを試して:

SELECT model, date
FROM doc
WHERE date = (SELECT MAX(date)
FROM doc GROUP BY model LIMIT 0, 1)
GROUP BY model
0

他の列がmax(date)と同じ行にあるという保証がないため、max(date)を使用しても問題は解決しませんでした。その代わりに、これは私の問題を解決し、正しい順序でグループをソートし、他の列の値は最大日付と同じ行からのものです:

SELECT model, date 
FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable
GROUP BY model
0
Iman Sedighi