Подтвердить что ты не робот

Получить последнюю дату из сгруппированных данных 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
4b9b3361

Ответ 1

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

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

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

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

Возможно, вы также захотите отобразить детали каждой записи, совпадающие с максимальной датой ее модели (которая, в отличие от сводки, запрашиваемой в OP, может привести к нескольким строкам из каждой модели, если они имеют одну и ту же дату).

SELECT d.model, d.date, d.color, d.etc FROM doc d
WHERE d.date IN (SELECT max(d2.date) FROM doc d2 WHERE d2.model=d.model)

Ответ 2

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

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

Ответ 3

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

Если дублировать даты/модель можно избежать с помощью следующего запроса.

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

Ответ 4

попробуйте следующее:

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

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

Ответ 8

SELECT model, date 
FROM doc
WHERE date = '2011-12-12'

вам даже не нужна группа

Если вы ищете максимальную дату, (например, пример не предполагает этого)

SELECT model, MAX(date) 
FROM doc
WHERE date = '2011-12-12'
group by model