从分组的MySQL数据中获取最新日期

时间:2011-12-12 05:33:35

标签: mysql sql date greatest-n-per-group

我的数据库中有以下数据:

|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

7 个答案:

答案 0 :(得分:95)

您在寻找每个型号的最大日期吗?

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

如果您正在寻找与整个桌子的最大日期相匹配的所有型号......

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

答案 1 :(得分:12)

您可以尝试在子查询中使用max(),如下所示:

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

答案 2 :(得分:6)

子查询给出日期。我们没有链接模型。所以下面的查询解决了这个问题。

如果有重复的日期/模型可以通过以下查询避免。

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

答案 3 :(得分:0)

试试这个:

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

答案 4 :(得分:0)

使用max(date)并没有解决我的问题,因为无法保证其他列与max(date)在同一行。而不是这个解决了我的问题,并按正确的顺序排序组,其他列的值与最大日期的行相同:

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

答案 5 :(得分:-2)

这应该有效:

SELECT model, date FROM doc GROUP BY model ORDER BY date DESC

它只是将日期从最后一个排序到第一个,通过分组它只抓取第一个。

答案 6 :(得分:-2)

为什么不使用它?

SELECT model, date FROM doc ORDER BY date DESC LIMIT 1