2016-08-15 7 views
1

У меня есть эта 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)); 

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

+0

Этот вопрос задан и отвечает бесконечно. Иногда его ответили правильно, поэтому я думаю, что это просто невезение, что ни один из ответов, представленных ниже, не достаточно. – Strawberry

ответ

1

Одним из способов вы можете сделать через 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 
) 
-2

Try This

Вы должны GROUP BY number, а также найти максимальный срок установлен ORDER BY date ASC в Query

SELECT * 
FROM `emp_events` AS ee 
GROUP BY `number` 
ORDER BY `date` ASC 
+0

Если вы не передадите функцию агрегации в свой выбор, вы получите смешанные результаты для заказа. – FrankerZ