2016-07-12 10 views
1

私は、メンバーごとの収益を製品別に記録するデータセットを持っています。私は月の変化に月を計算したいOracle SQLの月ごとの変化を計算する

select sum(revenue), member, month from member_revenue group by member, month 

は、理想的には、二度目のテーブル内のデータを呼び出しすることなく、メンバーによる収入ですので、のように、私はメンバーによる収入を合計することができます。

+1

どのOracleのバージョンですか? – Ditto

+0

Oracle SQL開発者4.0.1 –

答えて

0

だけlag()を使用します。

select member, month, sum(revenue) as this_month_revenue, 
     lag(sum(revenue)) over (partition by member order by month) as last_month_revenue 
from member_revenue 
group by member, month; 

注:これはすべての月に収益があることを前提としています。 LAG()は前の行でない場合でも前の行から収益を得ます。

1

あなたは、内側のクエリとして、あなたが既に持っているクエリを使用してlag窓関数を使用して、各月の前月の収入を差し引く外側のクエリでそれをラップすることができます:

SELECT member, 
     month, 
     month_revenue, 
     month_revenue - 
     LAG(month_revenue) OVER (PARTITION BY member 
           ORDER BY month ASC) AS revenue_change 
FROM (SELECT member, month, SUM(revenue) AS month_revenue 
     FROM  member_revenue 
     GROUP BY member, month) t 
+0

これはすばらしいです、ありがとう!わずかな更新は、私が '月ごと'を 'by by by by'ステートメントから省略する必要があると考えていることです。 –

+0

@JamieEdgecombeこれはもちろん正しいです。どのように恥ずかしい。編集され、修正されました。 – Mureinik

関連する問題