MYSQL группирует интервал дат за последние 10 минут

У меня есть база данных с сообщениями и полем отметки времени. Я хочу выбрать счетчик для каждой минуты за последние 10 минут. Это мой текущий запрос:

SELECT date_format(timestamp, '%H:%i:%s'), COUNT(*) as count
FROM test
WHERE timestamp BETWEEN DATE_SUB(NOW(), INTERVAL 10 MINUTE) AND NOW() 
GROUP by
    DATE_FORMAT(timestamp, '%i')
    ORDER BY timestamp ASC

Это почти работает так, как я хочу, показывая мне счет за последние 10 минут.

Однако, поскольку я группирую по метке времени, для каждой минуты, кроме самой последней, я получаю счет из первой записи базы данных для каждой минуты, что делает мой первый и последний результат намного меньше, чем другие.

Как на этом изображении:

MYSQL группирует интервал дат за последние 10 минут

количество меток времени
11:25:35 6
11:26:03 11
11:27:05 11
11:28:01 12
11:29:03 12
11:30:05 10
11:31:01 12
11:32:03 12
11:33:05 11
11:34:01 12
11:35:03 5

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

количество меток времени
11:25:35 11
11:26:35 12
11:27:35 11
11:28:35 11
11:29:35 11
11:30:35 11
11:31:35 11
11:32:35 11
11:33:35 11
11:34:35 11

MYSQL группирует интервал дат за последние 10 минут

Заранее спасибо!

stackoverflow.com/tags/sql/info => Не включайте изображения данных или кода! Думаю, не только я не вижу изображения с рабочего места.
Daniel E. 09.01.2019 11:51

Обрежьте используемые даты до минут в предложении WHERE.

Kickstart 09.01.2019 12:46

Возможный дубликат SELECT / GROUP BY - отрезки времени (10 секунд, 30 секунд и т. д.)

Daniel W. 09.01.2019 12:51

Возможный дубликат Группировка в интервал 5 минут во временном диапазоне.

Daniel W. 09.01.2019 12:52

Возможный дубликат Сгруппируйте запрос mysql с интервалом в 15 минут.

Daniel W. 09.01.2019 13:10
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
4
6
871
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в пункте WHERE. Перед агрегацией необходимо удалить лишние секунды.

Один из методов - преобразовать в секунды, разделить на 60, усечь число и умножить на 60. Следующее преобразовывает значение обратно в значение даты / времени, поэтому будет использоваться индекс для этого столбца:

SELECT date_format(timestamp, '%H:%i:%s'), COUNT(*) as count
FROM test
WHERE timestamp >= from_unixtime(floor(unix_timestamp(now()) / 60) * 60) - interval 10 minute AND
      timestamp < from_unixtime(floor(unix_timestamp(now()) / 60) * 60)
GROUP BY DATE_FORMAT(timestamp, '%i')
ORDER BY timestamp ASC

Большое спасибо, что сделали это для меня! Одна небольшая ошибка в вашем запросе: from_unixtimestamp должно быть from_unixtime, а 'AND' в предложении WHERE отсутствует, тогда этот ответ идеален.

LBial 09.01.2019 13:11

Другие вопросы по теме