我有一张表格,其中包含我的用户所做的所有活动的日志(登录,发布,搜索等)。
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然后是不同的),但也没有结果。
关于如何解决这个问题的任何想法?
答案 0 :(得分:2)
如果你只关心user_id和created_date,你可以按user_id进行分组并使用max()聚合函数:
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;
或者,如果您想要最后一行的所有详细信息,您可以检索派生表中的最大值并在连接中使用它:
| 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 |
第一个第二个查询只会获取user_id和date,而第二个查询会为您提供所有内容:
{{1}}
答案 1 :(得分:1)
尝试使用此查询:
select user_id, max(created_at) as last_activity
from your_table
group by user_id