私は、メンバーごとの収益を製品別に記録するデータセットを持っています。私は月の変化に月を計算したいOracle SQLの月ごとの変化を計算する
select sum(revenue), member, month from member_revenue group by member, month
は、理想的には、二度目のテーブル内のデータを呼び出しすることなく、メンバーによる収入ですので、のように、私はメンバーによる収入を合計することができます。
私は、メンバーごとの収益を製品別に記録するデータセットを持っています。私は月の変化に月を計算したいOracle SQLの月ごとの変化を計算する
select sum(revenue), member, month from member_revenue group by member, month
は、理想的には、二度目のテーブル内のデータを呼び出しすることなく、メンバーによる収入ですので、のように、私はメンバーによる収入を合計することができます。
だけ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()
は前の行でない場合でも前の行から収益を得ます。
あなたは、内側のクエリとして、あなたが既に持っているクエリを使用して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
これはすばらしいです、ありがとう!わずかな更新は、私が '月ごと'を 'by by by by'ステートメントから省略する必要があると考えていることです。 –
@JamieEdgecombeこれはもちろん正しいです。どのように恥ずかしい。編集され、修正されました。 – Mureinik
どのOracleのバージョンですか? – Ditto
Oracle SQL開発者4.0.1 –