在这里,我们有两个日期的贷方和借方数据。请告诉我查询以将余额从一个交易日结转到另一个交易日。
样本表:
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
答案 0 :(得分:1)
您正在寻找analytical SUM
function。
在一天级别上(使用GROUP BY)首先汇总CREDIT
和DEBIT
,请参见下面的子查询。
比使用分析型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