Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

calculate IRR in sql (decimal problem)

QosmioDec 10 2018 — edited Dec 13 2018

HI all, help me rewrite sql  because is now result (2.8613), i need 2.8613XXXX

WITH t(amnt) AS(

SELECT -294000.00 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17084.24 FROM DUAL UNION ALL

SELECT 17674.51 FROM DUAL

  )

  select max(k3.irr3) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(s3.rn3,0,s3.amnt,s3.amnt/power((1+k3.IRR3/100),rn3))))) IRR3_

from (select IRR3 from (select (IRR2_-1/100)+(level-1)/10000 IRR3

  from (select max(k2.irr2) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(s2.rn2,0,s2.amnt,s2.amnt/power((1+k2.IRR2/100),rn2))))) IRR2_

  from (select IRR2 from (select (IRR_-1)+(level-1)/100 IRR2 from

  (select max(k.irr) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(rn,0,amnt,amnt/power((1+k.IRR/100),rn))))) IRR_

  from (select (level-1) IRR from dual connect by level <= 101) k, (select rownum-1 rn, amnt from t ) s group by k.irr)

  connect by level <= 201) where IRR2 between 0 and 100) k2,

  (select rownum-1 rn2, amnt from t ) s2 group by k2.irr2)

connect by level <= 201) where IRR3 between 0 and 100) k3,

(select rownum-1 rn3, amnt from t ) s3 group by k3.irr3

Comments
Post Details
Added on Dec 10 2018
17 comments
944 views