我正在尝试根据每个名称的最旧时间戳来选择行。我提到了solution,但问题是我的表没有id列。我试图添加一个临时自动增量id列,但不知道如何做到这一点。基本上当时间戳相同时,我想选择给定名称的任何一个可用记录。有人可以帮帮我吗。
mysql> select * from tblemployee order by name;
+------+-------------+---------------------+
| name | day_of_week | signin_date |
+------+-------------+---------------------+
| bob | wednesday | 2017-08-11 08:11:30 |
| bob | thursday | 2017-06-11 11:21:30 | << same timestamp
| bob | saturday | 2017-08-28 09:01:30 |
| bob | wednesday | 2017-08-11 08:11:30 |
| bob | monday | 2017-06-11 11:21:30 | << same timestamp
| tom | wednesday | 2017-08-28 23:01:20 |
| tom | sunday | 2017-08-29 09:01:30 |
+------+-------------+---------------------+
我的预期结果将是这样的
对于&#39; tom&#39;
+------+-------------+---------------------+
| name | day_of_week | signin_date |
+------+-------------+---------------------+
| tom | wednesday | 2017-08-28 23:01:20 |
对于&#39; bob&#39; ,因为有两个记录具有相同的时间戳,我可以选择任何一个而不管day_of_week。
+------+-------------+---------------------+
| name | day_of_week | signin_date |
+------+-------------+---------------------+
| bob | thursday | 2017-06-11 11:21:30 |
(or)
| bob | monday | 2017-06-11 11:21:30 |
答案 0 :(得分:1)
您可以对min(signin_date)的组值使用连接,例如:
select distinct a.name, a.day_of_week , a.signin_date
from tblemployee a
inner join (
select name, min(signin_date) as min_date
from tblemployee
group by name
) t on t.min_date = a.signin_date and a.name = t.name
如果你有boigu的ambiguos行min(signin_date)我与两个不同的日子有关,那么你应该使用
select a.name, min(a.day_of_week) , a.signin_date
from tblemployee a
inner join (
select name, min(signin_date) as min_date
from tblemployee
group by name
) t on t.min_date = a.signin_date and a.name = t.name
group by a.name,a.signin_date