2015-06-09 80 views
0

我有一個包含我的用戶所做的所有活動(登錄,帖子,搜索...)日誌的表。從MySQL表中獲取每個用戶的最後一行(活動)

id user_id created_at activity 

1 2   2015-02-14 x 
2 3   2015-02-15 x 
3 1   2015-02-14 x 
4 2   2015-02-16 x 
5 2   2015-02-17 x 
6 3   2015-02-17 x 
7 1   2015-02-17 x 
8 1   2015-02-18 x 
9 2   2015-02-19 x 

現在我想獲得一個包含所有用戶的列表以及他們最後一次活動的日期。 所以在我的例子,我想:

User 1: 2015-02-18 
User 2: 2015-02-17 
User 3: 2015-02-17 

我的想法是先orderBy 'created_at' DESC,然後做一個DISTINCT('user_id')。但這似乎並不奏效。我也試過子查詢(第一orderBy然後不同),但也沒有結果。

關於如何解決這個問題的任何想法?

回答

1

嘗試與此查詢:

select user_id, max(created_at) as last_activity 
from your_table 
group by user_id 
2

如果你只是關心USER_ID和CREATED_DATE你可以按USER_ID和使用MAX()聚合函數:

select user_id, max(created_at) as last_created_at from your_table group by user_id; 

或者,如果你想最後一行的所有詳細信息可以檢索派生表中的最大值並將其用於連接中:

select * from your_table t1 
join (select user_id, max(created_at) as max_date 
     from table1 group by user_id 
    ) t2 on t1.user_id = t2.user_id and t1.created_at = t2.max_date; 

Sample SQL Fiddle

第一第二查詢只會讓你的USER_ID和日期,而第二個查詢會給你的一切:

| id | user_id | created_at | activity | user_id | max_date | 
|----|---------|------------|----------|---------|------------| 
| 6 |  3 | 2015-02-17 |  x |  3 | 2015-02-17 | 
| 8 |  1 | 2015-02-18 |  x |  1 | 2015-02-18 | 
| 9 |  2 | 2015-02-19 |  x |  2 | 2015-02-19 | 
相關問題