SQL-запрос для проверки ограничения скорости - PullRequest
4 голосов
/ 07 июня 2011

Допустим, у меня есть таблица messages, которую отправили пользователи, каждая с отметкой времени.

Я хочу сделать запрос, который сообщит мне (исторически) наибольшее количество сообщений, которое когда-либо делал пользовательотправлено в течение часа.

Другими словами, какое количество сообщений было отправлено за данный 1-часовой период.

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 07 июня 2011

Предполагая, что timestamp является DATETIME, в противном случае используйте FROM_UNIXTIME , чтобы преобразовать в DATETIME ...

Для [скользящего] счета в течение последнего часа:

  SELECT COUNT(*) AS cnt
    FROM MESSAGES m
   WHERE m.timestamp BETWEEN DATE_SUB(NOW(), INTERVAL 1 HOUR) 
                         AND NOW()
GROUP BY m.user
ORDER BY cnt DESC
   LIMIT 1

Если вы хотите определенный час, укажите час:

  SELECT COUNT(*) AS cnt
    FROM MESSAGES m
   WHERE m.timestamp BETWEEN '2011-06-06 14:00:00'
                         AND '2011-06-06 15:00:00'
GROUP BY m.user
ORDER BY cnt DESC
   LIMIT 1
2 голосов
/ 07 июня 2011

Нужно больше подробностей о структуре таблицы и т. Д., Но что-то вроде:

  select date(timestmp), hour(timestmp) , count(*) 
    from yourtable group by date(timestmp) , hour(timestmp)
    order by count(*) DESC
    limit 100; 

даст вам желаемый результат.

1 голос
/ 07 июня 2011

Я подозреваю, что это будет ужасно медленно, но в течение произвольного исторического максимального часа, что-то вроде этого может сработать (опровергните меня, если я ухожу, я не MySQL человек):

1 голос
/ 07 июня 2011

Примерно так должно работать:

SELECT MAX(PerHr) FROM 
  (SELECT COUNT(*) AS PerHr FROM messages WHERE msg_uid=? 
   GROUP BY msg_time/3600) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...