2014-02-11 1 views
0

Привет В принципе у меня есть следующие структуры таблицы: enter image description hereГруппировка по значениям строк через несколько окон в Postgres

Теперь пытаюсь сгруппировать их следующим за 13 week_end датирует, как показано ниже.

например: если мы рассматриваем week_end как 11/17/2012 для продукта p1, я должен быть в состоянии подвести итоги за предыдущий курс 13 недель и заполнить столбец 13week на таблице (то есть сумму ставки из строки От 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 недель, 52 для всех продуктов»? –

+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