0

这是我的数据表结构

    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

这是结果

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 计数

    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(计数:2)
1
3 3(计数:1)
4
4 => 在魔术函数之后应该是 4(计数:2)
1
1 1(计数:3)
1
6 6(计数:2)
6
4 4(计数 3)
4
4

所以它应该按组划分。

UPD 2 我需要这个查询来渲染时间线。现在它显示了用户所做的所有信息,但我需要对其进行分组。

  • user1 上传照片
  • user1 更改信息
  • user2 更新了简历
  • user3上传的照片
  • user3 更新了简历
  • user1 更新简历

  • user1 上传了照片并更改了 infomarion
  • user2 更新了简历
  • user3 上传的照片和更新的简历
  • user1 更新了简历
4

4 回答 4

2

我认为这可能是你想要做的:

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

我正在actor_id使用该DATE()功能对日期和日期进行分组

于 2012-09-17T14:55:42.327 回答
1

我自己找到解决方案

这是查询

设置@i = 0;
选择
    COUNT(`wrapper`.`id`) AS 'count',
    GROUP_CONCAT(`wrapper`.`type` SEPARATOR ',') as 'types'
从 (
    选择  
        @prev := (
            选择 prev_te.actor_id
            FROM `timeline_events` 作为 prev_te
            在哪里 prev_te.created_at > te.created_at
            ORDER BY prev_te.created_at ASC
            限制 1
        ) 作为 'prev_actor_id',
        如果(
            @prev = te.`actor_id` 或 @prev 为 NULL,
            @一世,
            @i := @i + 1
        ) 作为 'actor_id_group',
        `te`.*
    FROM `timeline_events` 作为 te
    订购方式
        te.created_at DESC,
        te.id DESC
) 作为`包装器`
GROUP BY `wrapper`.`actor_id_group`
限制 10

这是证明链接;-)

这个网站真的帮助了我

我使用包装器进行分组,因为mysql没有按变量分组,如果有人知道更好的解决方案,请告诉我

于 2012-09-18T09:26:44.577 回答
0

添加GROUP BY actor_id之前order by的子句。

最新编辑: select distinct actor_id, count(actor_id), created_at from actors group by actor_id order by created_at desc;

于 2012-09-17T14:43:04.420 回答
0

选择 teid, te.actor_id, te.created_at, te.updated_at , COUNT(*) FROM timeline_eventsAS te GROUP BY te.actor_id, te.created_at ORDER BY te.created_at DESC LIMIT 10

于 2012-09-17T14:43:59.683 回答