我假设您的时间列是一个实际的日期时间字段,而不仅仅是一个文本字段。
要计算事件发生在哪个季度,只需使用 date_trunc 将时间字段截断到最接近的小时即可。然后,通过将分钟部分除以 15 并将其铺平来计算它落入哪个季度。之后,您可以使用间隔来计算开始/结束时间。
前:2015 年 5 月 12 日 19:46:41。
将其截断为小时,您将得到 2015 年 5 月 12 日 19:00:00。
计算季度是 floor(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 中为你模拟了这个。
documentation 中列出了 postgres 的日期时间函数。