2014-09-06 35 views
1

尋求一系列日收益的運行累積回報?我知道這可以使用exp和sum來解決,但是我的返回序列不是使用LN計算的。在sql中運行累計回報

希望解決這個問題而不使用循環,因爲它們在sql中效率非常低。 使其快速運行非常重要。

數據集:

enter image description here

期望的結果

enter image description here

+0

您現在有機會解決您的問題,以便獲得有用的信息。示例數據,期望的結果和您嘗試的SQL都可以更好地提出問題。 – 2014-09-06 13:30:17

回答

4

這是你想要的嗎?

select t.*, 
     (select exp(sum(log(1 + return))) - 1 
     from table t2 
     where t2.date <= t.date 
     ) as cumereturn 
from table t; 

exp()log()的功能可能是您正在使用的數據庫不同。在許多數據庫中,你也可以使用:

select t.*, exp(sum(log(1 + return) over (order by date)) - 1 
from table t; 

我不認爲任何數據庫在product()聚集功能的建立。唉。

0

轉換(1+r)(1+r)(1+r)

exp(log(1+r) + log(1+r) + log(1+r)) 

不起作用,因爲1個+ R可能是負的。 負號日誌未定義。即回報率小於-100%

+0

你會如何處理負面? – 2017-09-08 03:48:57