Я хочу рассчитать процентные ставки по финансовым балансам за весь финансовый год. Я могу получить текущий баланс для конкретной даты, когда есть запись в таблице регистров, но когда нет записи, мой процентный подсчет идет с трудом. Ниже гроссбух таблица:Общая сумма для расчета процентов
OOWNCODE DTOFTRAN VOUCHER DRCR DAMOUNT CAMOUNT
00100VS055 04/01/2013 OPNG001NSE0 Debit 1303.87 0.00
00100VS055 05/15/2013 JVOFSET0000025 Debit 337.08 0.00
Ниже бегущая гроссбух баланс запроса:
Select ledger.oowncode as "Clientcode",
to_char(ledger.dtoftran, 'DD/MM/YYYY') as "Date",
sum(ledger.damount - ledger.camount) as "Ledger",
Sum(Sum(Ledger.Damount - Ledger.Camount)) over(Partition by Ledger.Oowncode Order by Ledger.Oowncode,ledger.dtoftran rows between unbounded preceding and current row) as "Running Balance",
round((Sum(Sum(Ledger.Damount - Ledger.Camount)) over(Partition by Ledger.Oowncode Order by Ledger.Oowncode,ledger.dtoftran rows between unbounded preceding and current row)*18/365),2) as "Interest"
from ledger ledger
where ledger.firmnumber = 'SUG-000001'
and ledger.oowncode = '00100VS055'
and ledger.dtoftran >='01-APR-2013'
and ledger.dtoftran <='31-MAY-2013'
group by ledger.oowncode, ledger.dtoftran
И ниже результат:
Clientcode Date Ledger Running BalanceInterest
00100VS055 01/04/2013 1303.87 1303.87 64.3
00100VS055 15/05/2013 337.08 1640.95 80.92
Теперь логически, бег баланс 1303.87 является баланс на каждый день до 15/05/2013, а затем 1640,95 - текущий баланс на следующие дни. Я хочу, чтобы результат как это:
Clientcode Date Ledger Running Balance Interest
00100VS055 01/04/2013 1303.87 1303.87 64.3
00100VS055 02/04/2013 1303.87 1303.87 64.3
00100VS055 03/04/2013 1303.87 1303.87 64.3
00100VS055 04/04/2013 1303.87 1303.87 64.3
и так далее до 15 недо могут 2013.
.
00100VS055 15/05/2013 337.08 1640.95 80.92
Не могли бы вы помочь мне на этой земле?
Привет Дэвид,
По вашей помощи я сделал необходимое кодирование:
WITH l AS
(SELECT oowncode,dtoftran,damount,camount from ledger
WHERE firmnumber='DDA-000001' and oowncode='ACCOPEN'
GROUP BY oowncode,dtoftran,damount,camount)
Select l.oowncode,cte_dates.dtoftran,sum(l.damount-l.camount) running
From (SELECT dtoftran
FROM ledger
WHERE dtoftran BETWEEN
TO_DATE('01/04/2011', 'DD/MM/YY')
AND TO_DATE('31/03/2012', 'DD/MM/YY') group by dtoftran) cte_dates
left outer join l
partition by (oowncode) on (cte_dates.dtoftran = l.dtoftran)
group by l.oowncode,cte_dates.dtoftran
и ниже вывод:
1 ACCOPEN 01/04/2011 12350
2 ACCOPEN 02/04/2011
3 ACCOPEN 04/04/2011
4 ACCOPEN 05/04/2011
5 ACCOPEN 06/04/2011
6 ACCOPEN 07/04/2011 2600
7 ACCOPEN 08/04/2011 -650
8 ACCOPEN 09/04/2011
9 ACCOPEN 11/04/2011
10 ACCOPEN 12/04/2011
11 ACCOPEN 13/04/2011 650
12 ACCOPEN 14/04/2011
13 ACCOPEN 15/04/2011 9100
14 ACCOPEN 16/04/2011
Я даже хочу на 02/04/2011, он должен привести к выполнению всего окошка. Можете ли вы направить меня, где я ошибаюсь?
Привет Дэвид спасибо за ваше руководство, но каким-то образом им удалось сделать то же самое могли бы вы предоставить мне запрос, спасибо заранее – user3064554
могли бы вы помочь меня относительно недостающих дат и общего количества – user3064554