按日期分组,然后按其他列分组

时间:2014-02-24 10:20:42

标签: mysql group-by mariadb

这是一个示例数据库提取,因为我认为我没有让自己清楚。一个更改包含多行。我想把它视为一个例子。

+----+---------+---------------------+
| id | user_id | created_at          |
+----+---------+---------------------+
|  1 |       2 | 2013-10-30 12:47:04 |
|  2 |       2 | 2013-10-30 12:47:04 |
|  3 |       2 | 2013-10-30 12:47:04 |
|  4 |       2 | 2013-10-30 16:38:30 |
|  5 |       2 | 2013-10-30 16:38:30 |
|  6 |       2 | 2013-10-30 16:38:30 |
|  7 |       4 | 2013-10-30 20:49:40 |
+----+---------+---------------------+

我想要的输出是

user_id |计数
2个| 2个
4 | 1

因为user_id 2有两个基于created_at的编辑块,而用户3有一个。

---上一篇文章---

我有一个包含要编辑的记录的表。它对表单的每次更改都有一个新行,一旦更新,它将针对更改的每一行保存更新的时间戳。它还为更换器保存user_id

我想计算每个用户的整个修改次数。

为了做到这一点,我想我需要按时间戳进行分组(对于编辑而言,不可能同时有两个进入)然后计算用户ID的出现次数。我无法让它发挥作用。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

如果您想计算用户的编辑次数,您应按用户ID分组,如:

select count(occurence) from tableName group by userId

这将从表中获取整个时间范围内的所有用户。

对于特定用户或特定时间段,您可以在where子句中提及。

如果您按时间戳分组,那么您将获得在该特定时间进行的所有编辑。

如果您按时间戳+用户分组,那么它将按用户的方式提供当时所做的所有编辑。

答案 1 :(得分:0)

您可以GROUP BY这样使用更多字段:

GROUP BY user_id, timestamp

答案 2 :(得分:0)

我想我拥有它。它需要一个子查询。

MariaDB [dartmoor]> select user_id,count(user_id)from(select user_id,created_at from revisions group by created_at)by user_id;

+---------+----------------+
| user_id | count(user_id) |
+---------+----------------+
|       2 |            199 |
|       3 |              2 |
|       4 |              1 |
+---------+----------------+
3 rows in set (0.00 sec)

答案 3 :(得分:0)

我想你想要:

SELECT user_id, COUNT(DISTINCT created_at) AS count
FROM revisions 
GROUP BY user_id ;