SQL: подсчет записей за 5-минутные интервалы (включая нули) - PullRequest
2 голосов
/ 09 ноября 2011

У меня есть таблица ответов, в которой есть поле временной метки (созданный_каталог), идентификатор и внешний ключ (context_id)

Для данного контекста мне бы хотелось узнать, сколько ответов произошло за5-минутные интервалы.

Это очень похоже на следующий вопрос:

Sql Server: подсчет записей (включая ноль) за десятиминутные интервалы

За исключением того, что я не использую SQL Server, я использую MySQL, но хотел бы увидеть более общее решение.

Будет много 5-минутных интервалов, в которых будет 0 ответов, которые яХотелось бы включить в результаты.

1 Ответ

4 голосов
/ 09 ноября 2011

Если начать с таблицы «ведер»

bucket_start          bucket_end
--
2011-01-01 00:00:00   2011-01-01 00:05:00
2011-01-01 00:05:00   2011-01-01 00:10:00
2011-01-01 00:10:00   2011-01-01 00:15:00
2011-01-01 00:15:00   2011-01-01 00:20:00

тогда вы можете использовать внешнее объединение, чтобы получить недостающие нули.

select bucket_start, bucket_end, count(context_id)
from buckets b
left join responses r 
       on (r.response_time >= b.bucket_start and 
           r.response_time <  b.bucket_end)
group by b.bucket_start, b.bucket_end

Существует много способов создания таблицы (или представления) сегментов. Но самое общее решение состоит в том, чтобы избегать автоматических генераторов рядов (таких как generate_series () PostgreSQL) и общих табличных выражений, потому что MySQL их не поддерживает. (Хотя вы можете написать свою собственную функцию для имитации generate_series ().)

Итак, самое общее решение - это просто базовая таблица. Вы также, вероятно, получите лучшую производительность из базовой таблицы, поскольку можете индексировать столбцы.

Вы видите примерно 105 000 строк в календарном году для такой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...