如果我选择*'
,我有一个看起来像这样的表+----+--------+------+------------+
| 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有限。任何帮助将不胜感激。
答案 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
);