我有一个带有用户 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/