2016-08-30 98 views
0

時,我有如下表:因帕拉:與標準選擇字段使用GROUP BY

id | animal | timestamp | team 
--------------------------------------- 
1 | dog  | 2016-08-01 | blue 
2 | cat  | 2016-08-02 | blue 
3 | bird  | 2016-07-05 | red 
4 | cow  | 2016-08-04 | red 
5 | snake  | 2016-08-12 | yellow 

我想找到每隊一個動物用的標準是:如果一個球隊有一個以上的動物,我們將選擇具有較晚時間戳的那個。這可能嗎?謝謝!

回答

1

一個典型的方法是使用row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by team order by timestamp desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
0

您可以使用下面的查詢,例如:

select * from teams t1 where `timestamp`=(select min(t2.`timestamp`) from teams t2 where t2.team = t1.team); 

在實踐中:

[localhost:21000] > create table teams(id int, animal string, `timestamp` timestamp, team string); 
[localhost:21000] > insert into teams values (1, "dog", "2016-08-01", "blue"), (2, "cat", "2016-08-02", "blue"), (3, "bird", "2016-07-05", "red"), (4, "cow", "2016-08-04", "red"), (5, "snake", "2016-08-12", "yellow"); 
[localhost:21000] > select * from teams t1 where `timestamp`=(select min(t2.`timestamp`) from teams t2 where t2.team = t1.team); 
+----+--------+---------------------+--------+ 
| id | animal | timestamp   | team | 
+----+--------+---------------------+--------+ 
| 1 | dog | 2016-08-01 00:00:00 | blue | 
| 3 | bird | 2016-07-05 00:00:00 | red | 
| 5 | snake | 2016-08-12 00:00:00 | yellow | 
+----+--------+---------------------+--------+