【发布时间】:2014-03-06 18:21:42
【问题描述】:
我有一个简单的日期范围表,每个日期范围都有相关的每周小时数:
CREATE TABLE tmp_ranges (
id SERIAL PRIMARY KEY,
rng daterange,
hrs_per_week INT
);
我想从中计算(即聚合)重叠/相交日期范围的每周小时总和的一些值:
INSERT INTO tmp_ranges (rng, hrs_per_week) VALUES
('[2014-03-15, 2014-06-28]', 9),
('[2014-04-18, 2014-07-15]', 2),
('[2014-06-03, 2014-09-12]', 9),
('[2014-10-03, 2014-11-14]', 6);
以图形方式(希望这能揭示的不仅仅是模糊的东西),解决方案如下所示:
hrs/wk T T`
9 | }-----|--------|--------> |
| |
2 | }--------|--------|-----> |
| |
9 | }--------|------|----> |
| |
6 | }---> |
| |
agg.hrs/wk --9-- ---11--- ---20--- --11-- --9-- -6-
最终日期范围故意与其他记录不连续,但仍会包含在最终记录集中...
显然,该解决方案需要从原始 4 条记录中生成 6 条记录,我很确定答案涉及使用窗口函数,但我完全不知所措......
有没有办法做到这一点?
提前非常感谢!
【问题讨论】:
标签: postgresql date-range