这是我的表结构和数据
id actor_id created_at updated_at 729 80 2012-09-10 17:05:59 2012-09-10 17:05:59 731 80 2012-09-10 17:04:02 2012-09-10 17:04:02 725 139 2012-09-06 13:59:08 2012-09-06 13:59:08 724 76 2012-09-06 11:31:30 2012-09-06 11:31:30 723 29 2012-09-06 09:40:22 2012-09-06 09:40:22 719 29 2012-09-06 09:24:02 2012-09-06 09:24:02 811 80 2012-09-02 17:05:59 2012-09-10 17:05:59 812 80 2012-09-01 17:04:02 2012-09-10 17:04:02
This is the result of
SELECT `te`.`id`, te.actor_id, te.created_at, te.created_at
FROM `timeline_events` AS te
ORDER BY
te.created_at DESC
LIMIT 10
我需要按 actor_id 和created_at对其进行分组
这就是我最终需要的
id actor_id created_at updated_at count 729 80 2012-09-10 17:05:59 2012-09-10 17:05:59 2 725 139 2012-09-06 13:59:08 2012-09-06 13:59:08 1 724 76 2012-09-06 11:31:30 2012-09-06 11:31:30 1 723 29 2012-09-06 09:40:22 2012-09-06 09:40:22 2 812 80 2012-09-10 17:04:02 2012-09-10 17:04:02 2
有人可以指导我如何做到这一点吗?
提前非常感谢
UPD为了简化,我将举另一个例子
所以说我有下一行
1 1 (count: 2) 1 3 3 (count: 1) 4 4 => after magic function it should be 4 (count: 2) 1 1 1 (count: 3) 1 6 6 (count: 2) 6 4 4 (count 3) 4 4
所以它应该按组划分。
UPD 2 我需要这个查询来渲染时间线。现在它显示了用户所做的所有信息,但我需要将其分组。
之前
- 用户1上传照片
- user1 更改了信息
- user2 更新了简介
- user3 上传照片
- user3 更新了简介
- user1 更新简介
之后
- user1 上传了照片并更改了信息
- user2 更新了简介
- user3 上传了照片并更新了个人简介
- user1 更新了简介
最佳答案
我认为这可能是您想要做的:
select t1.id,
t1.actor_id,
max(created_at) created_at,
updated_at,
t2.total
from yourtable t1
left join
(
select count(*) total, date(created_at) dt, actor_id
from yourtable
group by actor_id, date(created_at)
) t2
on t1.actor_id = t2.actor_id
and date(t1.created_at) = t2.dt
group by t1.actor_id, date(t1.created_at)
order by t1.created_at desc
参见SQL Fiddle with demo
我使用 DATE()
按 actor_id
和日期进行分组功能
关于mysql - 将相似的项目分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461643/