簡體   English   中英

如何為剩余總數編寫Oracle SQL查詢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM