Получить последнюю дату из сгруппированных данных MySQL - PullRequest
44 голосов
/ 12 декабря 2011

В моей базе данных есть следующие данные:

|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 ]

97 голосов
/ 12 декабря 2011

Вы ищете максимальную дату для каждой модели?

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

Если вы ищете все модели, соответствующие максимальной дате всей таблицы ...

SELECT model, date FROM doc
WHERE date IN (SELECT max(date) FROM doc)
12 голосов
/ 12 декабря 2011

Вы можете попробовать использовать max () в подзапросе, что-то вроде этого:

SELECT model, date  
FROM doc 
WHERE date in (SELECT MAX(date) from doc GROUP BY model);
8 голосов
/ 05 июня 2017

Даты предоставления подзапроса. Мы не связываемся с моделью. Так что ниже запрос решает проблему.

При наличии повторяющихся дат / модели можно избежать с помощью следующего запроса.

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
0 голосов
/ 28 февраля 2018

Использование max (date) не решило мою проблему, так как нет уверенности, что другие столбцы будут из той же строки, что и max (date). Вместо этого этот решил мою проблему и отсортировал группу в правильном порядке, а значения других столбцов находятся в той же строке, что и максимальная дата:

SELECT model, date 
FROM (SELECT * FROM doc ORDER BY date DESC) as sortedTable
GROUP BY model
0 голосов
/ 27 июля 2017

А почему бы не использовать это?

SELECT model, date FROM doc ORDER BY date DESC LIMIT 1
0 голосов
/ 09 октября 2014

Это должно работать:

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

Он просто сортирует даты от последнего к первому, а при группировании он захватывает только первое.

0 голосов
/ 12 декабря 2011

попробуйте это:

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