2017-08-30 56 views
1

我想根據每個名稱最舊的時間戳選擇行。我提到這個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 | 
+------+-------------+---------------------+ 

我預期的結果會是這樣的

對於「嗵」

+------+-------------+---------------------+ 
| name | day_of_week | signin_date   | 
+------+-------------+---------------------+ 
| tom | wednesday | 2017-08-28 23:01:20 | 

爲「鮑勃」因爲有兩個記錄有相同的時間戳,我可以挑選任何一個不管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

你想要一個人(bob)或一組人嗎?對於1,ORDER BY和LIMIT 1.我從「行」猜測你想要bob和tom,但它並不是100%清楚。 –

+0

我想根據最早的時間戳爲每個用戶選擇一條記錄。 – chidori

回答

1

您可以使用的分鐘(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 

,如果你有ambiguos行作爲鮑勃分鐘(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   
+0

對不起,這似乎並不適用於我。列重複,我看到有關鮑勃出現兩次的記錄。 – chidori

+0

答案更新.. – scaisEdge

+0

謝謝,列名現在看起來不錯,但我仍然看到查詢返回兩個記錄的情況下名稱'鮑勃'。 – chidori

相關問題