Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите расчетом ВСД(IRR) / 25 сообщений из 26, страница 1 из 2
12.07.2017, 07:19
    #39487104
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Здравствуйте, помогите разобраться проблемой при вычислении ВСД
вот расчет на ЕКСЕЛ встроенной функцией IRR
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
-294,000.00
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,674.51
2.86%



нашел решение в инете вот такое
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
1  create or replace FUNCTION XIRR(p_date_array in p_date_array,
  2                                  p_amount_array in t_amount_array,
  3                                  p_guess in number default 0
  4                                 )
  5  RETURN NUMBER
  6  IS
  7  BEGIN
  8    declare
  9      z number := 0;
 10      step_limit number := 0;
 11      temp number;
 12      step number := 0.1;
 13      d number := 0.5;
 14      l_MaxDate date;
 15      l_MinDate date;
 16      srok number;
 17    begin
 18      l_MaxDate := p_date_array(1);
 19      l_MinDate := p_date_array(1);
 20      -- 5@2K9 ?@>E>4: ?>8A: <0:A. 40BK 8 =0;8G8O E>BO 1K >4=>3> <8=CA0 8 ?;NA0 2 ?>B>:0E
 21      for i in 1 .. p_date_array.count
 22      loop
 23        if p_date_array(i) > l_MaxDate then
 24           l_MaxDate := p_date_array(i);
 25        end if;
 26        if p_date_array(i) < l_MinDate then
 27           l_MinDate := p_date_array(i);
 28        end if;
 29      end loop;
 30      select months_between(l_MaxDate, l_MinDate)
 31      into srok
 32      from dual;
 33      loop
 34        temp := p_amount_array(1);
 35        for i in 2 .. p_amount_array.count
 36        loop
 37          temp := temp + p_amount_array(i)/power((1 + d),(p_date_array(i) - p_date_array(1))/365);
 38        end loop;
 39        if (temp > 0) and (z = 0) then
 40           step := step / 2;
 41           z := 1;
 42        end if;
 43        if (temp < 0) and (z = 1) then
 44            step := step / 2;
 45            z := 0;
 46        end if;
 47        if (z = 0) then
 48            d := d - step;
 49        else
 50            d := d + step;
 51        end if;
 52        step_limit := step_limit + 1;
 53        exit when((round(temp * 100000) = 0) or (step_limit = 10000));
 54      end loop;
 55        return d;
 56    end;
 57* END XIRR;




подставляя вышеперечисленные данные получаю разницу так как функция возвращает 2.85%
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE
  2    P_DATE_ARRAY PMA.T_DATE_ARRAY;
  3    P_AMOUNT_ARRAY PMA.T_AMOUNT_ARRAY;
  4    P_GUESS NUMBER;
  5    v_Return NUMBER;
  6  BEGIN
  7    -- Modify the code to initialize the variable
  8    P_DATE_ARRAY := T_DATE_ARRAY(to_date('01.01.2007','dd.mm.yyyy'),to_date('01.07.2007','dd.mm.yyyy'),to_
  9    -- Modify the code to initialize the variable
 10    P_AMOUNT_ARRAY := T_AMOUNT_ARRAY(-100,58,60);
 11    P_GUESS := NULL;
 12    
 13    v_Return := XIRR(
 14    P_DATE_ARRAY => P_DATE_ARRAY,
 15    P_AMOUNT_ARRAY => P_AMOUNT_ARRAY,
 16    P_GUESS => P_GUESS
 17    );
 18    DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
 19  END;
...
Рейтинг: 0 / 0
12.07.2017, 09:43
    #39487189
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
помогите составить запрос
вот пример:
Код: plsql
1.
2.
3.
 Год     Поток платежей
  0        -100
  1         120



формула
Расчёт IRR (в процентах):
Код: plsql
1.
2.
3.
 NPV = 0
 -100 +120/[(1+IRR/100)^1] = 0
 IRR = 20
...
Рейтинг: 0 / 0
12.07.2017, 11:45
    #39487336
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
в экселе
Код: plsql
1.
2.
3.
4.
5.
6.
-10000
5000
4000
3000
1000
14%



запросе
Код: plsql
1.
2.
3.
4.
5.
select -10000 +5000/power((1+0/100),1)+4000/power((1+0/100),2)+3000/power((1+0/100),3)+1000/power((1+0/100),4)
      
from dual

3000



как получить 14 % ?
...
Рейтинг: 0 / 0
12.07.2017, 13:00
    #39487432
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакытпомогите составить запрос
вот пример:
Код: plsql
1.
2.
3.
 Год     Поток платежей
  0        -100
  1         120



формула
Расчёт IRR (в процентах):
Код: plsql
1.
2.
3.
 NPV = 0
 -100 +120/[(1+IRR/100)^1] = 0
 IRR = 20



Я попытался проверить уравнение и подставил IRR=20 .... может я что-тo не понял но равенства не получил
...
Рейтинг: 0 / 0
12.07.2017, 13:06
    #39487437
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
MaximaXXLБакытпомогите составить запрос
вот пример:
Код: plsql
1.
2.
3.
 Год     Поток платежей
  0        -100
  1         120



формула
Расчёт IRR (в процентах):
Код: plsql
1.
2.
3.
 NPV = 0
 -100 +120/[(1+IRR/100)^1] = 0
 IRR = 20



Я попытался проверить уравнение и подставил IRR=20 .... может я что-тo не понял но равенства не получил

Код: plsql
1.
2.
3.
select -100 +120/power(1+20/100,1) 
from dual
0
...
Рейтинг: 0 / 0
12.07.2017, 14:04
    #39487516
j2k
j2k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакытв экселе
Код: plsql
1.
2.
3.
4.
5.
6.
-10000
5000
4000
3000
1000
14%



запросе
Код: plsql
1.
2.
3.
4.
5.
select -10000 +5000/power((1+0/100),1)+4000/power((1+0/100),2)+3000/power((1+0/100),3)+1000/power((1+0/100),4)
      
from dual

3000



как получить 14 % ?

А где даты по которым идут эти потоки?
...
Рейтинг: 0 / 0
12.07.2017, 14:39
    #39487558
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
j2k,

можно любой по месяцам
...
Рейтинг: 0 / 0
12.07.2017, 15:12
    #39487610
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакытв экселе

запросе
Код: plsql
1.
2.
3.
4.
5.
select -10000 +5000/power((1+0/100),1)+4000/power((1+0/100),2)+3000/power((1+0/100),3)+1000/power((1+0/100),4)
      
from dual

3000



как получить 14 % ?

как по быстрому:
Код: plsql
1.
2.
select max(irr) KEEP (DENSE_RANK FIRST ORDER BY abs(-10000 +5000/power((1+IRR/100),1)+4000/power((1+IRR/100),2)+3000/power((1+IRR/100),3)+1000/power((1+IRR/100),4))) IRR_
from dual, (select level/100 IRR from dual connect by level <= 10000) k


IRR_
14.49
...
Рейтинг: 0 / 0
12.07.2017, 16:16
    #39487683
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
MaximaXXL,

Думаю правильнее будет так:
Код: plsql
1.
2.
select max(irr) KEEP (DENSE_RANK FIRST ORDER BY abs(-10000 +5000/power((1+IRR/100),1)+4000/power((1+IRR/100),2)+3000/power((1+IRR/100),3)+1000/power((1+IRR/100),4))) IRR_
from dual, (select (level-1)/100 IRR from dual connect by level <= 10001) k
...
Рейтинг: 0 / 0
12.07.2017, 21:31
    #39487892
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
MaximaXXLMaximaXXL,

Думаю правильнее будет так:
Код: plsql
1.
2.
select max(irr) KEEP (DENSE_RANK FIRST ORDER BY abs(-10000 +5000/power((1+IRR/100),1)+4000/power((1+IRR/100),2)+3000/power((1+IRR/100),3)+1000/power((1+IRR/100),4))) IRR_
from dual, (select (level-1)/100 IRR from dual connect by level <= 10001) k


спасибо, результат класс
теперь вопрос как можно вот такие данные присваивать
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
-294,000.00
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,084.24
17,674.51
...
Рейтинг: 0 / 0
12.07.2017, 22:25
    #39487903
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Если по быстрому, то как то так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
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(k.irr) KEEP (DENSE_RANK FIRST ORDER BY abs(s.ort))

from (select (level-1)/100 IRR from dual connect by level <= 10001) k
  cross apply (select sum(decode(rownum,1,amnt,amnt/power((1+k.IRR/100),rownum-1))) ort from t ) s
...
Рейтинг: 0 / 0
12.07.2017, 22:33
    #39487906
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Можно и без cross apply

Код: plsql
1.
2.
3.
4.
5.
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)/100 IRR from dual connect by level <= 10001) k,
  (select rownum-1 rn, amnt from t ) s
  group by k.irr
...
Рейтинг: 0 / 0
13.07.2017, 07:18
    #39487990
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
[quot MaximaXXL]
Спасибо , данные выводит правильно , но для точности оказывается надо после запятой до 5 знаков
как можно оптимизировать чтобы быстрее работала?

сейчас примерно 3 секунд
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
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(k.irr) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(rn,0,amnt,amnt/power((1+k.IRR/100),rn)))))/100 IRR_

from (select (level-1)/1000 IRR from dual connect by level <= 100001) k,
  (select rownum-1 rn, amnt from t ) s
  group by k.irr
0.02861
...
Рейтинг: 0 / 0
13.07.2017, 10:08
    #39488079
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select max(k2.irr2/100) 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 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)
    cross apply (select IRR2 from (select (IRR_-1)+(level-1)/1000 IRR2 from dual connect by level <= 2001) where IRR2 between 0 and 100) k2,
    (select rownum-1 rn2, amnt from t ) s2
group by k2.irr2



Вот разбил на 100 + 1000, должно быть быстрее, по аналогии можешь хоть по 10 разнести
...
Рейтинг: 0 / 0
13.07.2017, 10:36
    #39488108
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
MaximaXXLБакыт,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select max(k2.irr2/100) 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 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)
    cross apply (select IRR2 from (select (IRR_-1)+(level-1)/1000 IRR2 from dual connect by level <= 2001) where IRR2 between 0 and 100) k2,
    (select rownum-1 rn2, amnt from t ) s2
group by k2.irr2



Вот разбил на 100 + 1000, должно быть быстрее, по аналогии можешь хоть по 10 разнести

без cross apply можно у меня 11g ,как я понял эта опция уже на 12 С ?
...
Рейтинг: 0 / 0
13.07.2017, 11:27
    #39488173
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

В 11.2.0.4 - работает, проверь, если не будет работать - перепишу
...
Рейтинг: 0 / 0
13.07.2017, 11:33
    #39488179
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Вот без cross apply
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select max(k2.irr2/100) 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)/1000 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 <= 2001) where IRR2 between 0 and 100) k2,
    (select rownum-1 rn2, amnt from t ) s2
group by k2.irr2
...
Рейтинг: 0 / 0
13.07.2017, 11:41
    #39488185
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
MaximaXXL,

классс меньше секунды, огромное спасибо!!!

для 6 знаков после запятой можно ли сделать чтобы вообще погрешность было еще меньще
...
Рейтинг: 0 / 0
13.07.2017, 12:28
    #39488252
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Можно, можешь и сам ... но мой совет - разберись в селекте и прокоментируй, потому что через месяц не поймешь что происходит
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select max(k3.irr3/100) 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



Вот тебе 100+100+100
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
07.12.2018, 11:58
    #39744137
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Уважамый(ая) MaximaXXL,

помогите доработать запрос чтобы после запятой до 12 знаков а то, из за отсечения иногда на копейки дает расходжение
...
Рейтинг: 0 / 0
07.12.2018, 12:01
    #39744142
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
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/100) 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


ответ 0.028613 хотелось бы точности до 0.028613XXXXXX
...
Рейтинг: 0 / 0
07.12.2018, 13:30
    #39744252
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

MaximaXXLМожно, можешь и сам ... но мой совет - разберись в селекте и прокоментируй, потому что через месяц не поймешь что происходит


Вот не слушаете Вы советов, аж совсем
...
Рейтинг: 0 / 0
08.12.2018, 11:11
    #39744669
Бакыт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
MaximaXXLБакыт,

MaximaXXLМожно, можешь и сам ... но мой совет - разберись в селекте и прокоментируй, потому что через месяц не поймешь что происходит


Вот не слушаете Вы советов, аж совсем
пытался но не получается
...
Рейтинг: 0 / 0
10.12.2018, 12:41
    #39745257
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Как говоирт "Dora the Explorer" (некоторые ее знают под ником "Даша-путешественница"):

Давайте поможем Бакыт(у) научиться писать комменты, какие символами начинается комментарии
1) select
2) -- или /*
3) where
4) ++
...
Рейтинг: 0 / 0
10.12.2018, 12:46
    #39745262
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите расчетом ВСД(IRR)
Бакыт,

Не знаю что могло вызвать у Вас трудности задублировать 3 селекта операясь на данные прошлого года:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
select max(k6.irr6/100) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(s6.rn6,0,s6.amnt,s6.amnt/power((1+k6.IRR6/100),rn6))))) IRR6_
from (select IRR6 from (select (IRR5_-1/100000000)+(level-1)/10000000000 IRR6 
     from ( 

select max(k5.irr5) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(s5.rn5,0,s5.amnt,s5.amnt/power((1+k5.IRR5/100),rn5))))) IRR5_
from (select IRR5 from (select (IRR4_-1/1000000)+(level-1)/100000000 IRR5 
     from ( 

select max(k4.irr4) KEEP (DENSE_RANK FIRST ORDER BY abs(sum(decode(s4.rn4,0,s4.amnt,s4.amnt/power((1+k4.IRR4/100),rn4))))) IRR4_
from (select IRR4 from (select (IRR3_-1/10000)+(level-1)/1000000 IRR4 
     from ( 

  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
)
connect by level <= 201) where IRR4 between 0 and 100) k4,
(select rownum-1 rn4, amnt from t ) s4 group by k4.irr4
)
connect by level <= 201) where IRR5 between 0 and 100) k5,
(select rownum-1 rn5, amnt from t ) s5 group by k5.irr5
)
connect by level <= 201) where IRR6 between 0 and 100) k6,
(select rownum-1 rn6, amnt from t ) s6 group by k6.irr6
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите расчетом ВСД(IRR) / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]