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 に答える