[英]How to write oracle sql query for remaining totals
我有以下查询返回的数据集,下面显示了一些行,但是返回的实际数据超过500k行。
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
我想查询返回“ 剩余金额”列,如下所示:
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子句来避免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
使用分析功能应该比相关子查询提供更好的性能,因为表只被扫描了一次。
以下是使用一个相关子查询的一种方法coalesce
:
select y.dt,
y.amount,
coalesce((select sum(amount)
from yourtable y2
where y2.dt > y.dt),0) as remaining
from yourtable y
order by y.dt
您可以使用oracle分析函数
SELECT DATE,
AMOUNT,
(SUM (AMOUNT) OVER ()) - (SUM (AMOUNT) OVER (ORDER BY DATE))
AS REMAINING
FROM TABLE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.