如果我有一个从数据库返回的用户列表,是否可以过滤掉并返回在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)
在mysql中,如何返回 User B
因为这个用户在10分钟内出现了不止一次? User A
将从该结果中忽略,因为它们每10分钟只出现一次。
3条答案
按热度按时间9gm1akwq1#
您需要一个聚合查询,带有
HAVING
子句根据用户的出现次数筛选用户。日期的过滤器转到WHERE
条款。下面的查询选择在给定时间后10分钟内至少有2个条目的所有用户
@report_date
:q1qsirdb2#
我会考虑使用
exists
:选择ua*
这种方法很灵活。你的问题通常是关于
n
一段时间内发生的事件。通常,我主张使用exists
当有人想要一个单一的事件,但对于一般的问题,count(*)
是一个值得尊敬的方法。ars1skjm3#