Я предполагаю, что ваша колонка время является актуальной поле даты-времени, а не только текстовое поле.
Чтобы вычислить, в каком квартале произошло событие, просто обрезайте поле времени до ближайшего часа, используя date_trunc. Затем вычислите, в какой квартал он упал, разделив минутную порцию на 15 и настирая ее. После этого вы можете рассчитать время начала и окончания с помощью интервала.
EX: 12 мая 2015 19:46:41.
Усечение этого часа, вы получите 12 мая 2015 года 19:00:00.
Расчет квартала - пол (46/15) = 3
Начальное время = 12 мая 2015 года 19:00:00 + интервал '15 минут * * 3 (что составляет 19:45)
Время окончания = май, 12 2015 19:00:00 + интервал '15 минут -1 секунда '* 4 (что составляет 19:59)
Теперь у вас есть время начала, время окончания и количество действий. Все, что вам нужно сделать, это группировать их и суммировать все это вместе.
Используя следующую структуру таблицы,
create table events (
time timestamp,
actions integer
);
Запуск следующего запроса получит вам данные, которые вы ищете.
SELECT start_time, end_time, sum(actions), count(*)
FROM (
SELECT
date_trunc('hour',time) + (interval '15 minutes'*floor(date_part('minute',time)/15)) as start_time,
date_trunc('hour',time) + (interval '15 minutes -1 second'*(floor(date_part('minute',time)/15)+1)) as end_time,
actions
from events
) as interval_actions
group by start_time, end_time;
Я дразнил это в sql fiddle для вас.
Функции даты и времени для postgres перечислены в documentation.
См. Http://stackoverflow.com/questions/11391085/getting-date-list-in-a-range-in-postgresql. –