web-dev-qa-db-ja.com

postgresqlでのSQLの1時間ごとのデータ集約

私はデータベースの初心者なので、このデータベースについてあなたの助けを求めています。

時系列データを含むテーブルがあります。

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

テーブルは、間隔の上限のみを保持することにより、間隔ベースのデータを格納しています。たとえば、最初の行は値が10の[00:00-00:10]からの間隔を表し、2番目の行は値が5の(00:10-00:30]からの間隔を表し、3番目の行は間隔は(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

時系列データは大きいので、これをインデックス付けする際の助けがあれば非常にありがたいことに注意してください。

ありがとう、ダン

9
dan
_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
_

参照 sqlfiddle

インデックスについては、date_trunc('hour', t - interval '1 minute')で関数インデックスを試すことができますが、postgresqlがそれを使用できるかどうかはわかりません。

8
Leo