postgres sql bucket值生成的时间序列

时间:2015-12-19 13:18:33

标签: postgresql

我正在尝试从记录事件表中转换数据。我正在将数据转换为一致的“每日半小时视图”。例如,48个半周期(当没有匹配事件时填充半小时为零),我已经完成了这一部分成功。

SELECT t1.generate_series, 
v1.begin_time,
v1.end_time,
v1.volume
FROM tbl_my_values v1
 RIGHT JOIN ( SELECT generate_series.generate_series
       FROM generate_series((to_char(now(), 'YYYY-MM-dd'::text) || ' 22:00'::text)::timestamp without time zone, 
       (to_char(now() + '1 day'::interval, 'YYYY-MM-dd'::text) || ' 22:00'::text)::timestamp without time zone, '00:30:00'::interval) 
       generate_series(generate_series)) t1 ON t1.generate_series = v1.begin_time
       order by 1 ;

这提供了以下结果:

2015-12-19 22:00:00 | 2015-12-19 22:00:00+00 | 2015-12-19 23:00:00+00 | 172.10
2015-12-19 22:30:00 |                        |                        |
2015-12-19 23:00:00 | 2015-12-19 23:00:00+00 | 2015-12-20 00:00:00+00 | 243.60
2015-12-20 00:30:00 |                        |                        |
2015-12-20 01:00:00 |                        |                        |

但根据“开始”和“结束”列,视图应为:

2015-12-19 22:00:00 | 2015-12-19 22:00:00+00 | 2015-12-19 23:00:00+00 | 172.10
2015-12-19 22:30:00 |                        |                        | 172.10
2015-12-19 23:00:00 | 2015-12-19 23:00:00+00 | 2015-12-20 00:00:00+00 | 243.60
2015-12-20 00:30:00 |                        |                        | 243.60
2015-12-20 01:00:00 |                        |                        |

因为此示例中的值跨越2个半小时,例如有效期为一小时。 非常欢迎所有帮助。感谢

1 个答案:

答案 0 :(得分:1)

您的ON子句仅与begin_time进行比较。我想你想要一个不平等:

on t1.generate_series between v1.begin_time and t1.end_time