[英]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.