我想知道哪些用户在一小时的窗口中登录最多。我将所有活动记录在名为user_activity
的表格中,该表格包含event_class
,timestamp
和user_id
列(其他列存在,但不重要)。当用户登录时,LOGIN
事件类与CURRENT_TIMESTAMP
一起写入user_id
。
当我在一个小时左右的时间内看到数百个login
事件时,服务器运行竞争性大学事件注册并且学生CAPTCHA求解器(Python / OpenCV2 ...)已被捕获(见下文)。我制作了一个脚本,暂时禁止用户在过去十分钟内登录超过5次,这很简单。
我现在想要搜索历史记录,以查看每小时窗口每个登录用户的总计数。伪说话:" select each user_id from user_activity and group by total logins per last interval 1 hour
"所以我可以快速查看哪些用户和IP地址(未显示)快速登录。可以这样做吗?
示例" Sean"在我们禁止他之前的最后30次登录
+---------+-------------+---------------------+
| user_id | event_class | timestamp |
+---------+-------------+---------------------+
| 617 | LOGIN | 2018-05-01 21:46:20 |
| 617 | LOGIN | 2018-05-01 20:48:55 |
| 617 | LOGIN | 2018-05-01 20:45:01 |
| 617 | LOGIN | 2018-05-01 20:43:41 |
| 617 | LOGIN | 2018-05-01 20:42:06 |
| 617 | LOGIN | 2018-05-01 20:37:19 |
| 617 | LOGIN | 2018-05-01 20:32:31 |
| 617 | LOGIN | 2018-05-01 20:27:17 |
| 617 | LOGIN | 2018-05-01 20:26:21 |
| 617 | LOGIN | 2018-05-01 20:25:44 |
| 617 | LOGIN | 2018-05-01 20:24:08 |
| 617 | LOGIN | 2018-05-01 20:20:44 |
| 617 | LOGIN | 2018-05-01 20:16:59 |
| 617 | LOGIN | 2018-05-01 18:23:44 |
| 617 | LOGIN | 2018-05-01 13:01:14 |
| 617 | LOGIN | 2018-05-01 12:55:12 |
| 617 | LOGIN | 2018-05-01 12:47:58 |
| 617 | LOGIN | 2018-04-30 16:09:51 |
| 617 | LOGIN | 2018-04-30 15:38:22 |
| 617 | LOGIN | 2018-04-30 15:37:31 |
| 617 | LOGIN | 2018-04-30 15:36:20 |
| 617 | LOGIN | 2018-04-30 15:35:33 |
| 617 | LOGIN | 2018-04-30 15:34:08 |
| 617 | LOGIN | 2018-04-30 15:31:46 |
| 617 | LOGIN | 2018-04-30 15:24:33 |
| 617 | LOGIN | 2018-04-30 15:23:22 |
| 617 | LOGIN | 2018-04-30 15:20:27 |
| 617 | LOGIN | 2018-04-30 15:09:49 |
| 617 | LOGIN | 2018-04-30 15:05:59 |
| 617 | LOGIN | 2018-04-30 15:00:03 |
+---------+-------------+---------------------+
答案 0 :(得分:0)
当然,您只需选择所需的数据并按此分组:
SELECT
user_id,
CONCAT(DATE(`timestamp`), ' ', HOUR(`timestamp`)) AS datehour,
COUNT(1) AS logins
FROM user_activity
WHERE event_class = 'LOGIN'
GROUP BY user_id, datehour
HAVING logins > 5
在这里,我们应该看到每个用户每小时登录超过5次的行。这里唯一需要注意的是,这是每小时所以如果他们在晚上10:59登录3次,在晚上11:01登录3次,他们在任何特定时间内都不会超过3次