我正在尝试编写一个查询,该查询将扫描连接尝试的数据库,并在1小时内找到超过x次尝试的一组记录。
然而,这些一小时的范围无法修复(即不仅仅是6:00-7:00,而是6:01-7:01,6:15-7:15等)
这是一个插图
给定每小时最大尝试次数= 2
num Date 1 5:58 2 6:09 3 6:30 4 8:00 5 9:01 6 9:40 7 9:50 8 9:55 9 11:20
在此示例中,查询将返回行1,2,3,5,6,7,因为(1,2,3)和(5,6,7,8)在彼此的1小时内并且总计超过2次。
答案 0 :(得分:0)
SELECT num FROM table t1
WHERE EXISTS (
SELECT 1 FROM table t2
WHERE t2.num <> t1.num
AND TIMESTAMPDIFF(MINUTE,t1.date,t2.date) <= 60
)
下面的查询应该更快,特别是如果您的日期列已编入索引
SELECT num FROM table t1
WHERE (MINUTE(TIMEDIFF((SELECT MAX(t2.date)
FROM table t2
WHERE t2.num <> t1.num
AND t2.date < t1.date),t1.date)) <= 60)
OR (MINUTE(TIMEDIFF((SELECT MIN(t2.date)
FROM table t2
WHERE t2.num <> t1.num
AND t2.date > t1.date),t1.date)) <= 60)