Кажется, что это сработает, что очень близко к тому, что вы имели:
SELECT
MINUTE(date_field) as `minute`,
count(id) as count
FROM table
WHERE date_field > date_sub(now(), interval 5 minute)
GROUP BY MINUTE(date_field)
ORDER BY MINUTE(date_field);
Обратите внимание на добавленный столбец для отображения минуты и предложение GROUP BY, в котором результаты собраны в соответствующую минуту. Представьте, что у вас было 5 маленьких ведер с надписью за последние 5 минут. Теперь представьте, что вы бросили каждый ряд, которому было 4 минуты, в свое ведро. Затем count () подсчитает количество записей, найденных в каждом сегменте. Это быстрая визуализация того, как работает GROUP BY. http://www.tizag.com/mysqlTutorial/mysqlgroupby.php выглядит неплохой рецензией на GROUP BY, если вам нужна дополнительная информация.
Если вы запустите это, а количество записей в минуту кажется слишком большим, вам нужно будет устранить неполадки. Попробуйте заменить COUNT (id) на MAX (date_field) и MIN (date_field), чтобы вы могли понять, какие именно даты он собирает. Если значения MIN () и MAX () находятся внутри диапазона, возможно, в вашу базу данных записано больше данных, чем вы думаете.
Вы также можете дважды проверить, что у вас нет дат в будущем, поскольку все они будут> сейчас (). Упомянутые выше проверки MIN () / MAX () также должны идентифицировать это, если это проблема.