2015-10-30 147 views
2

我有一個表T1具有以下值SQL語句來更新一列

Table

我需要附加列是高達日期的平均結果表。 即

x1= 1000.45

x2= (1000.45+2000.00)/2

x3= (1000.45+2000.00+3000.50)/3

x4= (1000.45+2000.00+3000.50+4000.24)/4

結果表應如下所示:

expected result

我需要在Oracle數據庫中編寫SQL語句,以將列添加到列值爲x1,x2,x3,x4的結果表中。

+3

「我需要寫SQL語句」是啊很酷,那麼你寫了什麼? – Coderchu

+0

@Gonzalo謝謝你編輯我的問題。我是新來的,不知道格式 – user5505661

+0

看看[這篇文章](http://www.adp-gmbh.ch/ora/sql/analytical/rollingavg.html)給你一些想法。 –

回答

1

您需要爲此使用分析函數。我的未經檢驗的SQL如下:

SELECT 
date, 
division, 
sum_sales, 
AVG(sum_sales) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING) 
FROM 
table; 

date是Oracle的保留字,因此,如果您使用的是您的真實列名,你需要把它列入報價。

+0

我想你需要按... –

+1

@anwaar_hell不,不需要具有分析功能的GROUP BY。沒有分組,因爲每個原始行都在結果中表示。 –

1
select date,division,sum_sales,avg(sum_sales) over (order by sum_sales ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
from table 
group by date,division,sum_sales 
1

您需要通過使用日期AVG功能OVER排序。由於各行的所有前行聚集結果,你需要定義聚集windowUNBOUNDED PRECEDING

遵循這些指導方針,得到的說法是這樣的:

SELECT date_d, 
     division, 
     sum_sales, 
     AVG(sum_sales) 
     over ( 
      ORDER BY date_d ROWS unbounded preceding) avrg 
FROM supplier; 

你可以測試在FIDDLE

好兩個有關分析函數的信息在這兩篇文章:
Introduction to Analytic Functions (Part 1)
Introduction to Analytic Functions (Part 2)