postgresql 中的 SQL 每小时数据聚合

dan*_*dan 10 postgresql performance aggregate query-performance

我是数据库的新手,所以我正在寻求您的帮助。

我有一个包含时间序列数据的表。

2012/01/01 00:10, 10
2012/01/01 00:30, 5
2012/01/01 01:00, 10
2012/01/01 01:40, 10
2012/01/01 02:00, 20
Run Code Online (Sandbox Code Playgroud)

该表通过仅保留间隔的上限来存储基于间隔的数据。例如,第一行表示从 [00:00 - 00:10] 的区间,值为 10,第二行表示从 (00:10 - 00:30] 的区间,值为 5,第三行表示区间区间为 (00:30 - 01:00),值为 10。

我需要在 Postgres 中进行一个有效的查询来聚合上述结构的每小时数据。所以结果会是这样的:

2012/01/01 00:00, 2012/01/01 01:00, 25
2012/01/01 01:00, 2012/01/01 02:00, 30
Run Code Online (Sandbox Code Playgroud)

请注意,时间序列数据很大,因此非常感谢您对索引的任何帮助。

谢谢,丹

Leo*_*Leo 9

select
  date_trunc('hour', t - interval '1 minute') as interv_start,
  date_trunc('hour', t - interval '1 minute')  + interval '1 hours' as interv_end,
 sum(v)
  from myt 
    group by date_trunc('hour', t - interval '1 minute')
order by interv_start
Run Code Online (Sandbox Code Playgroud)

sqlfiddle

至于索引:你可以尝试一个函数索引,date_trunc('hour', t - interval '1 minute')但我不确定 postgresql 可以使用它。