我有以下查询返回的数据集,我在下面显示了一些行,但返回的实际数据超过 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 

使用分析函数应该比相关子查询提供更好的性能,因为表只被扫描一次。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!