小编Rob*_*Rob的帖子

重叠范围的最大 sum()

基本上我的问题是:如何在 PostgreSQL 9.3(或 9.4)中进行涉及重叠范围的聚合操作?我手头的具体问题是,给定一个范围,我想找到适用重叠范围的最大 sum()。一个简单的例子:

create table event (
  event_id int primary key,
  event_type_id int not null,
  period tstzrange not null,
  quantity int not null
);

insert into event (event_id, event_type_id, period, quantity) values
(1, 1,'[2016-01-06 09:00:00+00,2016-01-08 17:00:00+00]',1),
(2, 1,'[2016-01-07 09:00:00+00,2016-01-07 11:00:00+00]',1),
(3, 1,'[2016-01-07 13:00:00+00,2016-01-07 17:00:00+00]',1),
(4, 2,'[2016-01-07 12:00:00+00,2016-01-07 17:00:00+00]',1);
Run Code Online (Sandbox Code Playgroud)

给定具有以下子句的查询:

select ... 
where event_type_id = 1
and period && '[2016-01-07 00:00:00+00,2016-01-07 23:59:00+00]'::tstzrange 
group by event_type_id
Run Code Online (Sandbox Code Playgroud)

期望的结果是:3,即在给定时间戳范围内sum(quantity)相同范围event_type_id重叠的最大值。

postgresql window-functions postgresql-9.3 range-types

4
推荐指数
1
解决办法
3489
查看次数