谁能告诉我查询在Oracle中结转第二天的余额吗?

时间:2018-09-28 10:51:19

标签: oracle etl sqlplus

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

样本表:

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

2 个答案:

答案 0 :(得分:1)

您正在寻找analytical SUM function

在一天级别上(使用GROUP BY)首先汇总CREDITDEBIT,请参见下面的子查询。

比使用分析型SUM函数

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

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

  

如果您完全省略windowing_clause,则默认值为RANGE OF UNBOUNDED PRECEDING AND CURRENT ROWGE。

请注意,您是全局计算余额的,因此不要使用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

答案 1 :(得分:0)

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

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