如何在PostgreSQL中聚合特定的行?

时间:2015-05-12 18:53:37

标签: postgresql

我是PostgreSQL的新手,我想知道如何在一个表格中汇总15分钟的间隔。

例如:

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

1 个答案:

答案 0 :(得分:0)

我假设您的时间列是实际的日期时间字段,而不仅仅是文本字段。

要计算事件发生的季度,只需使用date_trunc将时间字段截断为最接近的小时。然后,通过将分钟部分除以15来计算它落入的四分之一。之后,您可以使用间隔计算开始/结束时间。

EX:2015年5月12日19:46:41 截止时间到2015年5月12日19:00:00 计算季度为楼层(46/15)= 3
开始时间= 2015年5月12日19:00:00 +间隔'15分钟'* 3(即19:45)
结束时间= 2015年5月12日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