Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
Здравствуйте, помогите разобраться проблемой при вычислении ВСД
вот расчет на ЕКСЕЛ встроенной функцией IRR
-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%


нашел решение в инете вот такое
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%
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;
12 июл 17, 07:19    [20635395]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
помогите составить запрос
вот пример:
 Год     Поток платежей
  0        -100
  1         120


формула
Расчёт IRR (в процентах):
 NPV = 0
 -100 +120/[(1+IRR/100)^1] = 0
 IRR = 20
12 июл 17, 09:43    [20635707]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
в экселе
-10000
5000
4000
3000
1000
14%


запросе
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 % ?
12 июл 17, 11:45    [20636298]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт
помогите составить запрос
вот пример:
 Год     Поток платежей
  0        -100
  1         120


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


Я попытался проверить уравнение и подставил IRR=20 .... может я что-тo не понял но равенства не получил
12 июл 17, 13:00    [20636686]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
MaximaXXL
Бакыт
помогите составить запрос
вот пример:
 Год     Поток платежей
  0        -100
  1         120


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


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


select -100 +120/power(1+20/100,1) 
from dual
0
12 июл 17, 13:06    [20636709]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
j2k
Member

Откуда: Новосибирск
Сообщений: 528
Бакыт
в экселе
-10000
5000
4000
3000
1000
14%


запросе
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 % ?


А где даты по которым идут эти потоки?
12 июл 17, 14:04    [20637027]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
j2k,

можно любой по месяцам
12 июл 17, 14:39    [20637184]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт
в экселе

запросе
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 % ?


как по быстрому:
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
12 июл 17, 15:12    [20637357]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
MaximaXXL,

Думаю правильнее будет так:
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
12 июл 17, 16:16    [20637658]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
MaximaXXL
MaximaXXL,

Думаю правильнее будет так:
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

спасибо, результат класс
теперь вопрос как можно вот такие данные присваивать
-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
12 июл 17, 21:31    [20638623]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

Если по быстрому, то как то так:
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
12 июл 17, 22:25    [20638724]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

Можно и без cross apply

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
12 июл 17, 22:33    [20638741]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
[quot MaximaXXL]
Спасибо , данные выводит правильно , но для точности оказывается надо после запятой до 5 знаков
как можно оптимизировать чтобы быстрее работала?

сейчас примерно 3 секунд
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
13 июл 17, 07:18    [20639065]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

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 разнести
13 июл 17, 10:08    [20639578]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
MaximaXXL
Бакыт,

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 С ?
13 июл 17, 10:36    [20639710]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

В 11.2.0.4 - работает, проверь, если не будет работать - перепишу
13 июл 17, 11:27    [20639960]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

Вот без cross apply
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
13 июл 17, 11:33    [20639991]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
MaximaXXL,

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

для 6 знаков после запятой можно ли сделать чтобы вообще погрешность было еще меньще
13 июл 17, 11:41    [20640038]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

Можно, можешь и сам ... но мой совет - разберись в селекте и прокоментируй, потому что через месяц не поймешь что происходит
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
13 июл 17, 12:28    [20640242]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
Уважамый(ая) MaximaXXL,

помогите доработать запрос чтобы после запятой до 12 знаков а то, из за отсечения иногда на копейки дает расходжение
7 дек 18, 11:58    [21756823]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
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
7 дек 18, 12:01    [21756829]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

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


Вот не слушаете Вы советов, аж совсем
7 дек 18, 13:30    [21756994]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
Бакыт
Member

Откуда: Кыргызстан
Сообщений: 732
MaximaXXL
Бакыт,

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


Вот не слушаете Вы советов, аж совсем

пытался но не получается
8 дек 18, 11:11    [21757788]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

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

Давайте поможем Бакыт(у) научиться писать комменты, какие символами начинается комментарии
1) select
2) -- или /*
3) where
4) ++
10 дек 18, 12:41    [21759004]     Ответить | Цитировать Сообщить модератору
 Re: помогите расчетом ВСД(IRR)  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
Бакыт,

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

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
10 дек 18, 12:46    [21759009]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить