Привет В принципе у меня есть следующие структуры таблицы: Группировка по значениям строк через несколько окон в 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;
я получаю ошибку: функция не может выполняться на сегменте, поскольку он обращается отношение «Рез» Может кто-нибудь помочь мне делая это. Благодаря!
Можете ли вы показать нам, как должен выглядеть окончательный ответ? Другими словами, что вы точно подразумеваете под «как мудрый для всех дат в неделю, 13 недель, 52 для всех продуктов»? –
@ DanielSparing отредактировал мое сообщение, чтобы объяснить это ясно сейчас. Не могли бы вы теперь взглянуть на – user2569524
. Начнем с того, что вы уже прочитали res из тела функции, поэтому не нужно читать также при вызове, можете ли вы попробовать следующее и опубликовать сообщение об ошибке: 'select vin_last_13week_rate (week_end, product_name); ' –