2014-02-11 59 views
0

喜在多個窗口行值基本上我有如下表結構: enter image description here分組超過了在Postgres

現在正試圖將它們分組如下超過week_end如下日期的13。例如:如果我們將產品p1的week_end視爲2012年11月17日,我應該能夠總結前面13周的費率,並填充在表格上的13周列(即來自行的費率總和) 16至29行)。我試着寫了如下的功能,但是因爲錯誤「訪問關係」

create or replace function vin_last_13week_rate(j date,p_name text) RETURNS numeric AS $$ 
declare 
week_end date; 
rate_tot numeric; 
rate_tot_final numeric default 0; 
current_week date; 
i integer; 

begin 
week_end:=(j::date - CAST(EXTRACT(DOW FROM j::date)+1 as int))::timestamp +'1 week'::interval+'23 hours'::interval+'59 minutes'::interval+'59 seconds'::interval ; 

for i in 1..13 loop 
current_week :=week_end - 7; 
select total_rate into rate_tot from res where week_end = current_week and product_name = p_name ; 

rate_tot_final= rate_tot_final + rate_tot; 

end loop; 
return rate_tot_final; 

end 

$$ LANGUAGE plpgsql VOLATILE; 

select vin_last_13week_rate(week_end,product_name) from res; 

我得到錯誤的不成功的:因爲它訪問關係「資源」功能無法分段執行 能有人幫助我這樣做。謝謝!

+0

你能告訴我們最終的答案應該是什麼樣子嗎?換句話說,對於所有產品的所有日期,13周,所有產品的所有日期,明智的意思是什麼? –

+0

@DanielSparing現在編輯我的帖子來解釋清楚。你可以看看現在 – user2569524

+0

好吧,首先,你已經從函數體中讀取了res,所以在調用時不需要讀取,你可以嘗試下面的內容併發布錯誤:'select vin_last_13week_rate(week_end,product_name); ' –

回答

0

如果我理解正確,您需要一個group by。 請試試這個:

SELECT product_name, week_start, sum(week_rate) 
FROM <table_name> 
GROUP BY product_name, week_start 
ORDER BY product_name, week_start 
+0

現在編輯我的文章。請告訴我們看看吧 – user2569524