我有以下查询返回的数据集,我在下面显示了一些行,但返回的实际数据超过 50 万行。
Date | amount
01-01-2010 | 200
01-02-2010 | 50
01-03-2010 | 400
01-04-2010 | 50
01-05-2010 | 0
01-06-2010 | 0
01-07-2010 | 100
我想查询返回 Remaining Amount 列,如下所示:
Date | amount | Remaining
01-01-2010 | 200 | 600
01-02-2010 | 50 | 550
01-03-2010 | 400 | 150
01-04-2010 | 50 | 100
01-05-2010 | 0 | 100
01-06-2010 | 0 | 100
01-07-2010 | 100 | 0
剩余金额以总金额之和开头,即所有记录金额列的总和。
请您参考如下方法:
您还可以使用 Windowing Clause避免 SUM(AMOUNT) - (...)
:
SELECT dt, AMOUNT,
nvl(sum(amount) over
(order by dt desc rows between unbounded preceding and 1 preceding)
, 0) as REMAINING
FROM yourtable
order by dt
使用分析函数应该比相关子查询提供更好的性能,因为表只被扫描一次。