首页 > 解决方案 > MySQL:返回用户在 Y 时间内提出 X 个请求

问题描述

如果我有一个从我的数据库返回的用户列表,是否可以过滤掉并返回在 Y 时间内出现超过 X 次的用户?

这是我要完成的示例:

mysql> SELECT * FROM user_activity;
+----------+---------------------+
| username | created_at          |
+----------+---------------------+
| User A   | 2018-12-06 00:00:00 |
| User B   | 2018-12-06 00:00:00 |
| User B   | 2018-12-06 00:09:00 |
| User A   | 2018-12-06 00:11:00 |
+----------+---------------------+
4 rows in set (0.00sec)

User B在 MySQL 中,由于该用户在 10 分钟内出现多次,我将如何返回?User A将从此结果中省略,因为它们每 10 分钟仅出现一次。

标签: mysqlsql

解决方案


您需要一个聚合查询,其中包含一个HAVING根据用户出现次数过滤用户的子句。日期的过滤器进入WHERE子句。

以下查询选择给定后 10 分钟内至少有 2 个条目的所有用户@report_date

set @report_date = "2018-12-06 00:00:00";

SELECT username
FROM user_activity
WHERE created_at 
    BETWEEN DATE_ADD(@report_date, INTERVAL 10 MINUTE) 
    AND @report_date
GROUP BY username
HAVING COUNT(*) > 1

推荐阅读