2016-09-15 11 views
1

のは、私がこのような時、シート用のテーブルがあるとしましょう:PostgreSQLで浮動平均をタイムスタンプ以上に取得するにはどうすればよいですか?

CREATE TABLE foo (
    spent_on DATETIME, 
    hours FLOAT 
) 

spent_onと仮定すると値がログに記録されたタイムスタンプで、hoursは、タスクに費やした時間の量を表す浮動小数点値です。

私は過去7日間に何時間もの変動平均を得ることができますか?

は、私は、次のを思い付いてきましたが、それは動作しません:私は、ウィンドウ関数のためのドキュメントを理解しようとした

ERROR: syntax error at or near "ROW" 
LINE 1: ... BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from d... 

:私は次のエラーを取得する

select spent_on, hours, avg(hours) 
over RANGE BETWEEN spent_on - INTERVAL '7 days' AND CURRENT ROW from daily; 

をパーティション、ウィンドウ、フレーム間のアイデアを掴むのに本当に問題があります。結果として、クエリを思いつくことはできません。

+1

残念ながら、Postgresは現在ありませんインターバルに基づいたサポート範囲。 –

答えて

2

私は(..パフォーマンスは小さなテーブルETCの問題ではない場合)RANGE構文についてはよく分からないので、私は、サブクエリを持つソリューションを提供してみましょう:

SELECT t.spent_on,t.hours, 
     COALESCE((SELECT AVG(s.hours) FROM foo 
     WHERE t.spent_on > CURRENT_TIMESTAMP - INTERVAL '7 days'),0) float_avg 
FROM foo t 
+0

私はこれを試しました。それは動作しますが、NULL値に問題があります(一部の行にはNULLが含まれています)。どのように私はこれを '合流'コールと組み合わせることができるか分かりません... – exhuma

+1

今@exhumaを試して – sagi

+0

ああ、私は今、とても愚かな気がします...^_ ^ありがとう! – exhuma

関連する問題