2016-08-15 35 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 

我想唯一的号码,但只得到那些具有最高的日期。结果必须得到ONLY:

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

尝试这个

你必须GROUP BY number也找到最大日期查询设置ORDER BY date ASC

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

如果您未在您的选择中传递聚合函数,则您将获得按顺序的混合结果。 – FrankerZ