0
私は時系列データを格納するためにpostgres(RDS)を使用しています。Postgresqlの時系列間隔
- タイムスタンプ:(インデックスとパーティションキー)
- ソース:整数インデックス
- データ:バイナリJSONに含まれるデータ
のは、私のデータは次のようになりましょう
timestamp | source | data ---------------------+----------+------------------ 2017-01-24 19:24:41 | 1 | { some jsonb } 2017-01-24 19:25:41 | 1 | { some jsonb } 2017-01-24 19:25:41 | 2 | { some jsonb } 2017-01-24 19:26:41 | 3 | { some jsonb } 2017-01-24 19:32:41 | 1 | { some jsonb } 2017-01-24 19:33:41 | 2 | { some jsonb } 2017-01-24 19:45:41 | 3 | { some jsonb } 2017-01-24 19:50:41 | 1 | { some jsonb } 2017-01-24 19:56:41 | 1 | { some jsonb } 2017-01-24 20:01:41 | 1 | { some jsonb }
データをsource
でソートし、間隔で分割したデータを15分間隔で分割するとします。 round
私はまた、それを時間間隔に分割する時間を望みます。
は、これまでのところ私は、問題は、私はまだ、各区間のための複数の結果を得ているということです
fifteen_minutes | source | data ---------------------+----------+------------------ 2017-01-24 19:15:00 | 1 | { some jsonb } 2017-01-24 19:15:00 | 1 | { some jsonb } 2017-01-24 19:30:00 | 1 | { some jsonb } 2017-01-24 19:45:00 | 1 | { some jsonb } 2017-01-24 19:45:00 | 1 | { some jsonb } 2017-01-24 20:00:00 | 1 | { some jsonb }
を返す
SELECT date_trunc('hour', timestamp) + date_part('minute', timestamp)::int/15 * interval '15 min' AS fifteen_minutes, data
FROM MY_TABLE
where source=1
GROUP BY data, fifteen_minutes
ORDER BY fifteen_minutes desc
を得ました。私は間隔によってdistinct
したいと最も近いタイムスタンプ
になるだろう理想的には私が取得したいと思います:(間隔ごとの単一の結果)
fifteen_minutes | source | data ---------------------+----------+------------------ 2017-01-24 19:15:00 | 1 | { some jsonb } 2017-01-24 19:30:00 | 1 | { some jsonb } 2017-01-24 19:45:00 | 1 | { some jsonb } 2017-01-24 20:00:00 | 1 | { some jsonb }
どれより良いアイデアを? ありがとう!
上記のデータに基づいて予想される出力を投稿してください – GurV
1つのソースと15分間のバケットについて、どのような値を「データ」から使用するかはどのように決定しますか? –
「017-01-24 19:24:41」または「2017-01-24 19:25:41」=>「19:24:41」から「 」の「最も近い」値は19: 15。 現在、コードはこのロジックをマップによって処理しています。結果を減らす –