powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите расчетом ВСД(IRR)
26 сообщений из 26, показаны все 2 страниц
помогите расчетом ВСД(IRR)
    #39487104
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, помогите разобраться проблемой при вычислении ВСД
вот расчет на ЕКСЕЛ встроенной функцией 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
помогите расчетом ВСД(IRR)
    #39487189
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помогите составить запрос
вот пример:
Код: 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
помогите расчетом ВСД(IRR)
    #39487336
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в экселе
Код: 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
помогите расчетом ВСД(IRR)
    #39487432
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 не понял но равенства не получил
...
Рейтинг: 0 / 0
помогите расчетом ВСД(IRR)
    #39487437
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите расчетом ВСД(IRR)
    #39487516
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бакытв экселе
Код: 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
помогите расчетом ВСД(IRR)
    #39487558
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2k,

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

запросе
Код: 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
помогите расчетом ВСД(IRR)
    #39487683
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите расчетом ВСД(IRR)
    #39487892
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите расчетом ВСД(IRR)
    #39487903
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бакыт,

Если по быстрому, то как то так:
Код: 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
помогите расчетом ВСД(IRR)
    #39487906
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бакыт,

Можно и без 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
помогите расчетом ВСД(IRR)
    #39487990
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[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
помогите расчетом ВСД(IRR)
    #39488079
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 разнести
...
Рейтинг: 0 / 0
помогите расчетом ВСД(IRR)
    #39488108
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите расчетом ВСД(IRR)
    #39488173
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бакыт,

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

Вот без 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
помогите расчетом ВСД(IRR)
    #39488185
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

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

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

Можно, можешь и сам ... но мой совет - разберись в селекте и прокоментируй, потому что через месяц не поймешь что происходит
Код: 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
Период между сообщениями больше года.
помогите расчетом ВСД(IRR)
    #39744137
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважамый(ая) MaximaXXL,

помогите доработать запрос чтобы после запятой до 12 знаков а то, из за отсечения иногда на копейки дает расходжение
...
Рейтинг: 0 / 0
помогите расчетом ВСД(IRR)
    #39744142
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
помогите расчетом ВСД(IRR)
    #39744252
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бакыт,

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


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

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


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

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

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

Не знаю что могло вызвать у Вас трудности задублировать 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
помогите расчетом ВСД(IRR)
    #39745264
Бакыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL, Спасибо большое!
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / помогите расчетом ВСД(IRR)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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