Как рассчитать дебетовое и кредитное сальдо с функцией задержки

strtotime() принимает все виды сумасшедших форматов, вы можете просто сделать это:

$stamp1 = strtotime('today 11 am');
$stamp2 = strtotime('tomorrow 11 am');
1
задан juergen d 19 January 2019 в 08:44
поделиться

2 ответа

Используйте формат S и replace стандартные знаки +/- с требуемыми кодами

Вы можете пропустить NVL, если ваши числовые столбцы не обнуляются. [ 119]

Агрегированная функция SUM часто используется с PARTITION BY для различения счетов - см. Комментарий в запросе.

with bal as (
select 
  id, cr, dr,
  sum(nvl(cr,0) - nvl(dr,0)) over (/* PARTITION BY account key */ ORDER BY id) as balance
from accounting)
select 
 id, dr db,cr,
 replace(replace(to_char(balance,'999,999.99S'),'+','CR'),'-','DB') balance
from bal 
order by id;

        ID         DB         CR BALANCE                                    
---------- ---------- ---------- ----------------
         1       1000          0   1,000.00DB                                 
         2          0        200     800.00DB                                 
         3        500          0   1,300.00DB                                 
         4          0        200   1,100.00DB                                 
         5          0        200     900.00DB                                 
         6          0       1800     900.00CR
0
ответ дан Marmite Bomber 19 January 2019 в 08:44
поделиться

Вы можете попробовать использовать оконную функцию sum.

CREATE TABLE accounting(
   ID int,
   EDATE varchar(50),
   DISCRIPTION varchar(50),
   DR int,
   CR int
);


INSERT INTO accounting VALUES (1,'19-JAN-19','cash in',1000,0);       
INSERT INTO accounting VALUES (2,'19-JAN-19','cash out',0,200); 
INSERT INTO accounting VALUES (3,'19-JAN-19','cash in',500,0);       
INSERT INTO accounting VALUES (4,'19-JAN-19','cash out',0,200);        
INSERT INTO accounting VALUES (5,'19-JAN-19','cash out',0,200);        
INSERT INTO accounting VALUES (6,'19-JAN-19','cash out',0,1800);

Запрос 1 :

select 
  id,
  edate,
  discription,
  dr,
  cr,
  sum(DR) over(order by id) - sum(CR) over(order by id)  as balance 
from accounting

Результаты :

| ID |     EDATE | DISCRIPTION |   DR |   CR | BALANCE |
|----|-----------|-------------|------|------|---------|
|  1 | 19-JAN-19 |     cash in | 1000 |    0 |    1000 |
|  2 | 19-JAN-19 |    cash out |    0 |  200 |     800 |
|  3 | 19-JAN-19 |     cash in |  500 |    0 |    1300 |
|  4 | 19-JAN-19 |    cash out |    0 |  200 |    1100 |
|  5 | 19-JAN-19 |    cash out |    0 |  200 |     900 |
|  6 | 19-JAN-19 |    cash out |    0 | 1800 |    -900 |
0
ответ дан D-Shih 19 January 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: