mysql - 如何在没有 groupby 的情况下计算以前事件的数量

标签 mysql count

我有一个带有用户 ID 和时间戳的简单事件表。每行是用户执行事件的一次发生:

+--------+---------------+
| userid |   timestamp   |
+--------+---------------+
|      3 | 5/25/14 23:30 |
|      2 | 5/25/14 20:57 |
|      1 | 5/25/14 20:18 |
|      2 | 5/25/14 18:49 |
|      2 | 5/25/14 13:41 |
|      1 | 5/25/14 5:47  |
|      3 | 5/24/14 22:34 |
|      1 | 5/24/14 22:07 |
|      2 | 5/24/14 21:53 |
|      1 | 5/24/14 21:42 |
+--------+---------------+

我想添加/选择一个列,其中包含我之前为每一行看到用户的次数。所以预期的输出将是:

+--------+---------------+-------+
| userid |   timestamp   | count |
+--------+---------------+-------+
|      3 | 5/25/14 23:30 |     2 |
|      2 | 5/25/14 20:57 |     4 |
|      1 | 5/25/14 20:18 |     4 |
|      2 | 5/25/14 18:49 |     3 |
|      2 | 5/25/14 13:41 |     2 |
|      1 | 5/25/14 5:47  |     3 |
|      3 | 5/24/14 22:34 |     1 |
|      1 | 5/24/14 22:07 |     2 |
|      2 | 5/24/14 21:53 |     1 |
|      1 | 5/24/14 21:42 |     1 |
+--------+---------------+-------+

例如,从顶部开始的第三行表示我已经见过用户 1 总共四次,包括当前一次。计数为 1 的底行表示我只见过用户 1 一次(这是第一次)。

有没有办法在 mysql 中进行这种类型的计数?谢谢!

最佳答案

SELECT userid, timestamp,
    (SELECT COUNT(*) FROM myTable t2
    WHERE t2.userid = t1.userid
    AND t2.timestamp <= t1.timestamp) AS user_count
FROM myTable t1

我知道你问的是一个没有分组依据的查询,但这里有一个有它的:)

SELECT t1.userid, t1.timestamp, COUNT(*)
FROM myTable t1
JOIN myTable t2 ON t1.userid = t2.userid AND t2.timestamp <= t1.timestamp
GROUP BY t1.userid, t1.timestamp

关于mysql - 如何在没有 groupby 的情况下计算以前事件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863229/

相关文章:

arrays - 二维数组的计数算法

sql - 使用CASE为SQLite中的COUNT语句设置条件

mysql - mySql 存储过程的语法错误

mysql - 带有 Group by 的 MAX() 函数非常慢

php - 识别何时发生更新?

SQL 计算日期范围内的连续天数

mysql - 数据透视表 : getting data from one column

插入、更新时的 MySql 触发器

php - r($me->id) 中的 r 是什么

Ruby 计数数组对象,如果对象包含值