使用distinct和

时间:2016-06-13 13:14:03

标签: mysql

如果我选择*'

,我有一个看起来像这样的表
+----+--------+------+------------+
| id | name   | task | day        |
+----+--------+------+------------+
|  1 | Rodney | 2    | 2016-05-05 |
|  2 | Rodney | 2    | 2016-05-08 |
|  3 | Rodney | 8    | 2016-05-08 |
|  4 | Scott  | 2    | 2016-05-05 |
|  5 | Scott  | 8    | 2016-05-05 |
|  6 | Frank  | 2    | 2016-05-05 |
|  7 | Frank  | 2    | 2016-05-08 |
+----+--------+------+------------+

我想要实现的是一个查询,它将为每个人获取最后输入的“任务”。所以,在这种情况下,我想要回来:

 2 | Rodney | 2    | 2016-05-08 
 3 | Rodney | 8    | 2016-05-08
 4 | Scott  | 2    | 2016-05-05
 5 | Scott  | 8    | 2016-05-05
 7 | Frank  | 2    | 2016-05-08 

我很确定我需要使用与名称和&最近的条目的任务和最大值。只是不确定如何将它们中的两个结构化以获得结果。

select distinct name, task from test;

让我亲近......

+--------+------+
| name   | task |
+--------+------+
| Rodney | 2    |
| Rodney | 8    |
| Scott  | 2    |
| Scott  | 8    |
| Frank  | 2    |
+--------+------+

但没有约会......我的SQL有限。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

汇总您的行,以便获得每个名称的最新日期。然后再次访问该表以获取与这几天匹配的记录:

select *
from test
where (name, day) in
(
  select name, max(day)
  from test
  group by name
);

另一种方法是选择不存在的记录以后的同名记录:

select *
from test
where not exists
(
  select *
  from test later
  where later.name = test.name
  and later.day > test.day
);