MySQL在任何24小时窗口内检查X条记录


MySQL Check for X records within any 24 hour window

我有一个系统,它将失败的登录尝试存储在一个表中,并记录事件的日期时间。我需要的是一种查询数据库的方法,以检查任何用户在任何24小时内是否有X次失败的尝试。

例如,设x=5。如果在任何时间点,此表中的记录数在24小时窗口内为5或更多,我需要检查是否有任何用户。24小时周期可以是从当前时间到24小时之前,或者可以是例如上个月间隔24小时的任意两个时间点之间。

这可以通过一个简单的MySQL查询实现吗?我看到的大多数线程都是关于计算过去24小时内的记录,这并不是我所需要的。

SELECT
yt1.userId
FROM
your_table yt1
INNER JOIN your_table yt2 ON yt1.userId = yt2.userId 
AND yt2.fail_date <= yt1.fail_date 
AND yt2.fail_date >= yt1.fail_date - INTERVAL 24 HOUR
GROUP BY yt1.userId
HAVING COUNT(*) >= 5