データベースに次のデータがあります。
|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)
次のようなサブクエリでmax()を使用してみてください:
SELECT model, date
FROM doc
WHERE date in (SELECT MAX(date) from doc GROUP BY model);
日付を与えるサブクエリ。モデルとリンクしていません。したがって、以下のクエリは問題を解決します。
日付/モデルが重複している場合は、次のクエリで回避できます。
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
これを試して:
SELECT model, date
FROM doc
WHERE date = (SELECT MAX(date)
FROM doc GROUP BY model LIMIT 0, 1)
GROUP BY model
他の列がmax(date)と同じ行にあるという保証がないため、max(date)を使用しても問題は解決しませんでした。その代わりに、これは私の問題を解決し、正しい順序でグループをソートし、他の列の値は最大日付と同じ行からのものです:
SELECT model, date
FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable
GROUP BY model