私は現在、以下のコードを使用して2か月間にユーザーの "monthly_return"を生成しています。私は "monthly_return"を以下にリンクされたStackOverflowの質問と同様の累積的な "リンクされた"リターンにする方法はありますか?SQLを使用した累積累積リターン
同様の質問:Running cumulative return in sql
私が試した:
exp(sum(log(1 + cumulative_return) over (order by date)) - 1)
しかし、エラーが表示されます。
PG :: WrongObjectType:ERROR:指定されたが、ログOVERは、ウィンドウ関数でもありません集計関数LINE 3:exp(sum(log(1 + cumulative_return)を超える日付順) - 1 ... ^:SELECT portfolio_id、exp(log(1 + cumulative_return) 1)FROM(日付選択、portfolio_id、(value_cents * 0.01 - cash_flow_cents * 0.01)/(ポートフォリオに含まれているポートフォリオのうち、ポートフォリオに含まれるポートフォリオのポートフォリオに含まれるポートフォリオのポートフォリオを特定する。
入力データは次のようになります
1/1/2017: $100 value, $100 cash flow
1/2/2017: $100 value, $0 cash flow
1/3/2017: $100 value, $0 cash flow
1/4/2017: $200 value, $100 cash flow
出力は次のようになります(累積)リンクされていない毎月のリターンを示す
1/1/2017: 0% cumulative return
1/2/2017: 0% cumulative return
1/3/2017: 0% cumulative return
1/4/2017: 0% cumulative return
私の現在のコード。
SELECT
date,
portfolio_id,
(value_cents * 0.01 - cash_flow_cents * 0.01)/(lag(value_cents * 0.01, 1) over (ORDER BY portfolio_id, date)) - 1 AS monthly_return
FROM portfolio_balances
WHERE portfolio_id = 16
ORDER BY portfolio_id, date;
ご使用のデータベースで質問にタグを付けてください。 –
@GordonLinoff - ありがとう、Postgres! –
は、いくつかのサンプルデータと予想される出力を示します。 –