SQL-запрос для проверки количества повторных сообщений в течение X минут? - PullRequest
0 голосов
/ 27 июня 2011

Есть ли запрос, в котором я мог бы найти соответствие, если бы поле cmd было отправлено более 3 раз с одинаковым содержимым за последние 15 минут?

В настоящее время у меня есть это:

SELECT COUNT(*) 
FROM `log` 
WHERE gid = @gid 
AND ts_register BETWEEN DATE_SUB(NOW() , INTERVAL 15 MINUTE) AND NOW()

Который соберет все сообщения, отправленные за последние 15 минут глобальным идентификатором.

Есть ли способ принять во внимание поле cmd и указать, отправил ли гид повторный cmd более 3 раз?в течение последних 15 минут?

например:

gid 1 cmd testing repeatable cmd
gid 1 cmd testing repeatable cmd
gid 1 cmd testing repeatable cmd
gid 1 cmd different cmd

Так что это даст мне счет 3.

Ответы [ 2 ]

4 голосов
/ 27 июня 2011

Вы хотите сделать это:

SELECT cmd, COUNT(*) Qty
FROM `log` 
WHERE gid = @gid 
AND ts_register BETWEEN DATE_SUB(NOW() , INTERVAL 15 MINUTE) AND NOW()
GROUP BY cmd

Учитывая ваши данные, это вернет:

Cmd                                  Qty
---                                  ---
gid 1 cmd testing repeatable cmd     3
gid 1 cmd different cmd              1

Обновление

Используя предложение @ Gidon (Upvoted you, man!), Вы можете добавить предложение HAVING, чтобы отображать только те из них, у которых больше 3:

SELECT cmd, COUNT(*) Qty
FROM `log` 
WHERE gid = @gid 
AND ts_register BETWEEN DATE_SUB(NOW() , INTERVAL 15 MINUTE) AND NOW()
GROUP BY cmd
HAVING COUNT(*) > 3
2 голосов
/ 27 июня 2011

добавьте это к запросу Адриана, чтобы получить более 3 критериев.

HAVING COUNT(*) > 3
...