Когда я больше или равен 3, я пытаюсь получить значение предыдущей строки этого столбца и пытаюсь использовать его в расчете текущей строки, и я пытался использовать функцию задержки, чтобы сделать это, но безуспешно, получал ошибка как «невозможно использовать оконную функцию в ОБНОВЛЕНИИ». Может ли кто-нибудь помочь мне. Спасибо!
CREATE OR REPLACE FUNCTION vin_calc() RETURNS text AS
$BODY$
DECLARE
r res%rowtype;
i integer default 0;
x text;
curs2 CURSOR FOR SELECT * FROM res;
BEGIN
open curs2;
-- FOR r IN curs2
LOOP
FETCH curs2 INTO r;
exit when not found;
if(x!=r.prod_grp_nm) then
i:=0;
end if;
i:= i+1;
if (i=1) then
update res set duration =0 where
dur=r.dur and prod_grp_nm=r.prod_grp_nm and week_end=r.week_end;
elsif(i=2) then
update res set duration =1 where
dur=r.dur and prod_grp_nm=r.prod_grp_nm and week_end=r.week_end;
elsif(i>=3) then
update res set gwma_duration =0.875*lag(res.duration,1) over()+(0.125*r.dur) where
dur=r.dur and prod_grp_nm=r.prod_grp_nm and week_end=r.week_end;
end if ;
x:=r.prod_grp_nm;
END LOOP;
RETURN 'yes';
END
$BODY$
LANGUAGE 'plpgsql' ;
ORDER BY
. Вся ваша операция - ерунда без порядка сортировки. В таблице базы данных нет естественного порядка. - person Erwin Brandstetter   schedule 24.02.2014