mysql - 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 分钟仅出现一次。
解决方案
您需要一个聚合查询,其中包含一个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
推荐阅读
- git - Git - .gitconfig 中第 69 行的错误配置
- powershell - 无法使用 PowerShell 在远程计算机上运行参数化批处理文件
- ios - 如何通过自动布局管理自适应布局
- css - 输入[type=radio]:在收音机伸出之前
- javascript - OHLC 工具提示在股票图表(highstock)中也被复制到成交量图表?
- oracle - Oracle 中的 BITMAP MERGE 和 BITMAP OR 有什么区别?
- powershell - ADSI Searcher - PowerShell 在 FindAll() 之后获取 IP 地址
- css - 反应引导表单文本区域行高
- php - 如何使用Interface克服多个if,else
- java - 如何给接口提供@After @Before注释