mysql - 将相似的项目分组

标签 mysql sql group-by grouping

这是我的表结构和数据

    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/

相关文章:

MySQL:(产品)价格的首选列类型?

mysql - 如何设置从 MySQL 到 MongoDB 的复制?

mysql - 如何在MySQL中提取第一个数字之前的字符串部分?

java - servlet 的数据库连接问题 - Java webapp

mysql - 选择从 1 列计数到 2 列

java - 使用phpmyadmin中的服务器上的查询重命名mysql中的数据库名称

php - 我是 MySQL 新手,有什么办法可以使数据库受到损害吗?

php - 使用过去 2 个月(日期)

sql - Oracle SQL 选择不在 GROUP BY 子句中的行

SQL 查询以选择每个组的百分比