1

请原谅我这个简单的问题,但我不是 MySQL 方面的专家。我需要从名为 detailed_log. 问题是我不知道如何列出经常出现登录错误的用户(比如少于 5 分钟)。

在这里我按顺序列出我们拥有的内容(我按时间简要排序并删除了不必要的列)

SELECT user_name, 
time, 
SUBSTR(status, 1, 8) AS status 
FROM detailed_log 
WHERE (status LIKE '%LOGINERR%' OR status LIKE '%LOGINOK%') 
ORDER BY time

这就是结果

结果

那么谁能说我如何列出间隔<5分钟的每个用户的登录错误?
编辑:为了澄清我添加了以下示例:

在此处输入图像描述

4

1 回答 1

1

通过将表连接到自身,您可以获得不到 5 分钟前还有另一个 LOGINERR 的 LOGINERR。

SELECT l1.user_name, l1.time
FROM detailed_log AS l1
JOIN detailed_log AS l2 ON l2.user_name = l1.user_name
WHERE l1.status LIKE 'LOGINERR' AND l2.status LIKE 'LOGINERR'
AND l1.time > l2.time
AND l1.time < (l2.time + INTERVAL 5 MINUTE)

一些分组,你可以得到一个总结:

SELECT l1.user_name, MAX(l1.time) AS latest, COUNT(DISTINCT l1.time) AS tries
FROM detailed_log AS l1
JOIN detailed_log AS l2 ON l2.user_name = l1.user_name
WHERE l1.status LIKE 'LOGINERR' AND l2.status LIKE 'LOGINERR'
AND l1.time > l2.time
AND l1.time < (l2.time + INTERVAL 5 MINUTE)
GROUP BY l1.user_name
于 2012-12-18T22:36:37.127 回答