powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Размножить график платежей
8 сообщений из 8, страница 1 из 1
Размножить график платежей
    #39768425
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли размножить график платежей, с помощью connect by level

Пример

Есть входящие даты 2

Код: plsql
1.
2.
3.
4.
5.
6.
with t1 as (
 select sysdate curr_date, to_date('20.08.2019','dd.mm.yyyy') end_date, 50000 DEPT, 14/12/100 Rate
)
select add_months(curr_date , level-1), dept, dept*rate, percent, dept- dept*rate ostatok
from t2 
connect by add_months(curr_date , level-1) <= end_date



Так вот, как зацепиться во второй строке рекурсивно за остаток?
через lag lead не получается.

примерно пытаюсь получить такое:

Дата Долг Платеж Остаток01.02.2019 50 000 583.5 49 41601.03.2019 49 416 593 48 82301.04.2019 48 823 586 48 23701.05.2019 48 237 579 47 65801.06.2019 47 658 572 47 08601.07.2019 47 086 565 46 52101.08.2019 46 521 558 45 96301.09.2019 45 963 552 45 412
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768426
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimyazчерез lag lead не получается.row_number
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768696
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-dimyazчерез lag lead не получается.row_number

не совсем понял, как может помочь row_Number
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768713
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
with t1 as (
            select  sysdate curr_date,
                    date '2019-08-20' end_date,
                    50000 DEPT,
                    14/12/100 rate
              from  dual
           )
select  dt,
        dept,
        platezh,
        ostatok
  from  t1
  model
    dimension by(
                 1 mon
                )
      measures(
               trunc(curr_date,'mm') dt,
               trunc(end_date,'mm') end_date,
               dept,
               rate,
               dept * rate platezh,
               dept - dept * rate ostatok
              )
      rules iterate(10e6) until(dt[iteration_number + 2] > end_date[1])
       (
        dt[iteration_number + 2] = add_months(dt[cv() - 1],1),
        dept[iteration_number + 2] = ostatok[cv() - 1],
        platezh[iteration_number + 2] = dept[cv()] * rate[1],
        ostatok[iteration_number + 2] = dept[cv()] - platezh[cv()]
       )
/

DT              DEPT    PLATEZH    OSTATOK
--------- ---------- ---------- ----------
01-FEB-19      50000 583.333333 49416.6667
01-MAR-19 49416.6667 576.527778 48840.1389
01-APR-19 48840.1389  569.80162 48270.3373
01-MAY-19 48270.3373 563.153935 47707.1833
01-JUN-19 47707.1833 556.583806 47150.5995
01-JUL-19 47150.5995 550.090328 46600.5092
01-AUG-19 46600.5092 543.672607 46056.8366
01-SEP-19 46056.8366  537.32976 45519.5068

8 rows selected.

SQL>



SY.
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768715
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или с неитеративной моделькой:

Код: 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.
with t1 as (
            select  sysdate curr_date,
                    date '2019-08-20' end_date,
                    50000 DEPT,
                    14/12/100 rate
              from  dual
           )
select  dt,
        dept,
        platezh,
        ostatok
  from  t1
  model
    dimension by(
                 1 mon
                )
      measures(
               trunc(curr_date,'mm') dt,
               trunc(end_date,'mm') end_date,
               dept,
               rate,
               dept * rate platezh,
               dept - dept * rate ostatok,
               months_between(trunc(end_date,'mm'),trunc(curr_date,'mm')) + 2 last_mon
              )
      rules automatic order
       (
         dt[for mon from 2 to last_mon[1] increment 1] order by mon = add_months(dt[cv() - 1],1),
        platezh[for mon from 2 to last_mon[1] increment 1] = ostatok[cv() - 1] * rate[1],
        dept[for mon from 2 to last_mon[1] increment 1] = ostatok[cv() - 1],
        ostatok[for mon from 2 to last_mon[1] increment 1] = ostatok[cv() - 1] - platezh[cv()]
       )
/

DT              DEPT    PLATEZH    OSTATOK
--------- ---------- ---------- ----------
01-FEB-19      50000 583.333333 49416.6667
01-MAR-19 49416.6667 576.527778 48840.1389
01-APR-19 48840.1389  569.80162 48270.3373
01-MAY-19 48270.3373 563.153935 47707.1833
01-JUN-19 47707.1833 556.583806 47150.5995
01-JUL-19 47150.5995 550.090328 46600.5092
01-AUG-19 46600.5092 543.672607 46056.8366
01-SEP-19 46056.8366  537.32976 45519.5068

8 rows selected.

SQL>



SY.
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768717
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimyazкак может помочь row_NumberЧлен геометрической прогрессии вычисляется простым выражением по его номеру.
Но поскольку "платежей" намекает на банковский процент, то принцип решения неозвученной задачи ошибочен, так как геометрическия прогрессия с множителем < 1 к нулую стремится только в бесконечности.
14/12/100 вероятно означает неверное деление процента по месяцам.
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768726
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Спасибо, очень круто!
никак руки не дойдут до изучения model.
...
Рейтинг: 0 / 0
Размножить график платежей
    #39768728
dimyaz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-dimyazкак может помочь row_NumberЧлен геометрической прогрессии вычисляется простым выражением по его номеру.
Но поскольку "платежей" намекает на банковский процент, то принцип решения неозвученной задачи ошибочен, так как геометрическия прогрессия с множителем < 1 к нулую стремится только в бесконечности.
14/12/100 вероятно означает неверное деление процента по месяцам.

Вы правы, расчеты здесь указаны просто к примеру. Но у меня не получалось сделать именно перенос остатка на следующую строку.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Размножить график платежей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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