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

nun*_*unu 49 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|
Run Code Online (Sandbox Code Playgroud)

我想获得每个模型组的最新日期:

| model | date     | 
+-------+----------+
| bee   |2011-12-12|
| tar   |2011-12-13|
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT model, date 
FROM doc
WHERE date ........????? //what is the next?
GROUP BY model
Run Code Online (Sandbox Code Playgroud)

pha*_*ers 101

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

SELECT model, max(date) FROM doc
GROUP BY model
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找符合整个表格最大日期的所有型号......

SELECT model, date FROM doc
WHERE date IN (SELECT max(date) FROM doc)
Run Code Online (Sandbox Code Playgroud)

  • 我认为正确的sql是:`SELECT model,date FROM doc WHERE date IN(SELECT max(date)FROM doc group by model)`,应该最后添加group. (3认同)

gpr*_*our 13

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

SELECT model, date  
FROM doc 
WHERE date in (SELECT MAX(date) from doc GROUP BY model);
Run Code Online (Sandbox Code Playgroud)

  • 考虑数据集 `('foo', '2019-10-01'), ('foo', '2019-10-10'), ('bar', '2019-10-01')` 使用 `GROUP子选择中的 BY` 将为“2019-10-01”返回不需要的“foo”行,因为它与“bar”最大日期匹配相同的日期。 (2认同)

小智 10

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

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

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
Run Code Online (Sandbox Code Playgroud)