2017-10-05 7 views
0

"支出"の値があり、それが古いものから新しいものに移行した後のNULL行もある場合は、どのように "注文"を集計できますか?SUMはA基準に基づいています

電流出力:

Date | Product | Spend | Orders 
------------------------------------------------ 
2017-09-18 Product A  NULL   7 
2017-09-11 Product A  NULL   7 
2017-09-04 Product A 1000.00  16 
2017-08-28 Product A  NULL   7 
2017-08-21 Product A 2000.00  35 
2017-08-14 Product A 1000.00  20 
2017-08-07 Product A  NULL   3 
2017-07-31 Product A  NULL   3 
2017-07-24 Product A 1000.00  14 

所望の出力:

Date | Product | Spend | Orders | SUMMED Orders 
--------------------------------------------------------------- 
2017-09-18 Product A  NULL   7   NULL 
2017-09-11 Product A  NULL   7   NULL 
2017-09-04 Product A 1000.00  16   30 (16 + 7 + 7) 
2017-08-28 Product A  NULL   7   NULL 
2017-08-21 Product A 2000.00  35   42 (35 + 7) 
2017-08-14 Product A 1000.00  20   20 (20) 
2017-08-07 Product A  NULL   3   NULL 
2017-07-31 Product A  NULL   3   NULL 
2017-07-24 Product A 1000.00  14   20 (14 + 3 + 3) 

私は新しい合計を思い付いた方法を示すために合計受注欄の数学式を書きました。

ありがとうございます。

+0

正しく注文したようですか? –

+0

@ TedatORCL.Pro一致する日付を修正しました。ありがとうございます –

答えて

1

古い行ではない行の数を数えて、行にグループを割り当てることができます。このグループを使用して合計を計算することができます。

select t.*, 
     sum(orders) over (partition by product, grp) as summed_orders 
from (select t.*, 
      sum((spend is not null)::int) over (partition by product order by date asc) as grp 
     from t 
    ) t; 

これで最初の行は削除されません。私はそれを取り除くための論理が何であるか分かりません。

0
select "date", product, spend, orders, sum(orders) over (order by "date") rt 
    from t1 
order by "date" desc , spend nulls first; 
+0

ほとんどありますが、 "支出"値があるたびに "rt"をリセットする必要があります。この「rt」列は、各製品の合計を合計します。 –

+0

あなたの前提にして、私はあなたのためにそれを編集して修正しましょう –

+0

今すぐうまく走り、試してみてください。 –

関連する問題