2015-05-12 2 views
0

Я новичок в PostgreSQL, и мне хотелось знать, как мы можем заполнить 15-минутные интервалы в таблице.Как агрегировать определенные строки в PostgreSQL?

, например:

Table: 
time: count 
9:01 1 
9:05 2 
9:13 3 
9:20 4 
9:21 3 
9:35 3 

Output: 
time   count 
9:00 - 9:15 6 
9:15 - 9:30 7 
9:30 - 9:45 3 
+0

См. Http://stackoverflow.com/questions/11391085/getting-date-list-in-a-range-in-postgresql. –

ответ

0

Я предполагаю, что ваша колонка время является актуальной поле даты-времени, а не только текстовое поле.

Чтобы вычислить, в каком квартале произошло событие, просто обрезайте поле времени до ближайшего часа, используя 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.

Смежные вопросы