Получить строку для каждой группы, имеющей максимальную дату

У меня есть эта таблица MySQL:

ID     Number     Date
1      4          2015-05-30
2      4          2016-03-15
3      5          2016-04-01
4      5          2016-05-01

Я хочу получить уникальный номер, но только те, у кого самая высокая дата. Результат должен получить ТОЛЬКО:

ID     Number     Date
2      4          2016-03-15
4      5          2016-05-01

Я старался:

SELECT 
* 
FROM emp_events ee 
Date = (SELECT MAX(Date) FROM emp_events ee1 WHERE ee1.Number = ee.Number));

но не получить все желаемые результаты.

2 ответа

Решение

Один способ, которым вы можете достичь через INNER JOIN

SELECT 
E.*
FROM emp_events E
INNER JOIN(
    SELECT 
        Number,
        MAX(Date) max_date
    FROM emp_events ee 
    GROUP BY Number
) AS t
ON E.Number = t.Number AND E.Date = t.max_date

Другим способом может быть использование IN:

SELECT 
E.*
FROM emp_events E
WHERE (E.Number,E.Date) IN 
(
    SELECT 
        Number,
        MAX(Date) max_date
    FROM emp_events ee 
    GROUP BY Number
)

Попробуй это

Ты должен GROUP BY number а также найти максимальный набор дат ORDER BY date ASC в запросе

SELECT *
FROM `emp_events` AS ee
GROUP BY `number`
ORDER BY `date` ASC
Другие вопросы по тегам