谁能告诉我在 oracle 中将余额结转到第二天的查询?

Can anyone tell me query to carry forward balance to next day in oracle?

这里我们有两个日期的贷方和借方数据。请告诉我将余额从一个交易日期结转到另一个交易日期的查询。

样本table:

TRANS_DATE    CREDIT      DEBIT
--------- ---------- ----------
24-SEP-18       2500        400
24-SEP-18                   200
24-SEP-18        500
30-SEP-18        400       1200
30-SEP-18        400

预期输出输出:

 TRANS_DATE    BALANCE
---------  ----------
24-SEP-18       2400
30-SEP-18       2000

您可以将贷方和借方相加,然后从前者中减去后者:

SELECT   trans_date, SUM(credit) - SUM(debit) AS balance
FROM     mytable
GROUP BY trans_date

您正在寻找 analytical SUM function

首先在一天级别聚合 CREDITDEBIT(使用 GROUP BY),请参阅下面的子查询。

比使用解析SUM函数

sum(CREDIT - DEBIT) over (order by TRANS_DATE) as balance

您省略了 windowing_clause,这意味着您按照给定的顺序将所有行加到当前行。请参阅以下文档中的相关部分。

If you omit the windowing_clause entirely, then the default is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.

请注意,您计算的是全局余额,因此您不使用 PARTITION BY 子句。如果你考虑平衡,你会这样做。以帐户为基础。

查询

with day_bal as (
select trans_date, sum(nvl(credit,0)) credit, sum(nvl(debit,0)) debit from bal
group by trans_date)
select 
TRANS_DATE, CREDIT, DEBIT,
sum(CREDIT - DEBIT) over (order by TRANS_DATE) as balance
from day_bal
order by 1;

给予

TRANS_DATE              CREDIT      DEBIT    BALANCE
------------------- ---------- ---------- ----------
24-09-2018 00:00:00       3000        600       2400
30-09-2018 00:00:00        800       1200       2000