2016-04-05 7 views
0

ソースデータには、トランザクションID、日付、金額が含まれています。私は毎日移動し、トランザクションごとに平均金額を取る1週間の平均値が必要です。問題は、特定の日にトランザクションがないことがあり、トランザクションごと、1日に1回、週単位ではなく1日ごとに平均の移動が必要なことです。この特定のケースでは、前の行でOVERを使用することはできません。私はそれをスタックです:(PostgreSQLで後続週平均を移動する

データは次のようになります。 https://gist.github.com/avitominoz/a252e9f1ab3b1d02aa700252839428dd

+0

あなたの質問を編集して、あなたヘクタールのクエリを提示してくださいve。また、データ構造を画像ではなくテキストとして直接質問に入れる必要があります。 –

答えて

0

これを行うには、2つの方法があります一つは、すべての結果を得るためにgenerate_series()を使用する第2の横方向の結合を使用

。。。
with minmax as (
     select min(trade_date) as mintd, max(trade_date) as maxtd 
     from sales 
    ) 
select days.dte, s.values, 
     avg(values) over (order by days.dte 
         rows between 6 preceding and current row 
         ) as avg_7day 
from generate_series(mintd, maxtd, interval '1 day') days(dte) left join 
    sales s 
    on s.trade_dte = days.dte; 

注:。。これはあなたが0の場合、むしろ0として扱うよりも不足している日には値を無視し、その後、avg(coalesce(values, 0))を使用