gpt4 book ai didi

mysql - SQL中如何获取频繁的时间间隔?

转载 作者:行者123 更新时间:2023-11-29 00:36:43 24 4
gpt4 key购买 nike

请原谅我提出这个简单的问题,但我不是 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

这是结果

result

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

enter image description here

最佳答案

通过将表与其自身连接,您可以在不到 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

关于mysql - SQL中如何获取频繁的时间间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13940503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com