2015-06-09 69 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 | 
相关问题