Durchschnitt von z.B. 20 Vorgängerdatensätzen

Durchschnitt von z.B. 20 Vorgängerdatensätzen

am 15.06.2007 23:12:35 von h.schoene

Hallo,
habe eine bestehende Tabelle mit den Feldern id, wert1 und wert2. Feld
wert2 ist leer. Datensätze =3D mehrere Tausend.
Problem: Möchte in Feld wert2 den Durchschnitt der jeweils letzten 20
Vorgängerdatensätze einfügen.
Hat jemand dazu eine Idee?

Gruss Heiko

Re: Durchschnitt von z.B. 20 Vorgängerdatensätzen

am 15.06.2007 23:16:30 von h.schoene

On 15 Jun., 23:12, h.scho...@yahoo.de wrote:
> Hallo,
> habe eine bestehende Tabelle mit den Feldern id, wert1 und wert2. Feld
> wert2 ist leer. Datensätze =3D mehrere Tausend.
> Problem: Möchte in Feld wert2 den Durchschnitt der jeweils letzten 20
> Vorgängerdatensätze einfügen.
> Hat jemand dazu eine Idee?
>
> Gruss Heiko

Vergessen: Ich meine den Durchschnitt von wert1 der jeweils letzten 20
Vorgängerdatensätze.

Re: Durchschnitt von z.B. 20 Vorgängerdatensätzen

am 16.06.2007 09:27:12 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Durchschnitt von z.B. 20 Vorgängerdatensätzen

am 18.06.2007 14:38:23 von Daniel Fischer

h.schoene!

> Hallo,
> habe eine bestehende Tabelle mit den Feldern id, wert1 und wert2. Feld
> wert2 ist leer. Datensätze = mehrere Tausend.
> Problem: Möchte in Feld wert2 den Durchschnitt der jeweils letzten 20
> Vorgängerdatensätze einfügen.
> Hat jemand dazu eine Idee?

Ich fürchte, keine gute, ich bin erkältet...

Eine Anfang, für den id fortlaufend sein muss:

delimiter //
drop procedure if exists update_wert2//
create procedure update_wert2(cnt int)
begin
set @temp = 1;
update tab set wert2 = 0;
ll: loop
update tab as a inner join tab as b on a.id = b.id + @temp set a.wert2 = a.wert2 + b.wert1;
set @temp = @temp + 1;
if @temp <= cnt then iterate ll; end if;
leave ll;
end loop ll;
update tab set wert2 = wert2 / cnt;
end; //
delimiter ;
call update_wert2(20);


Gruß
Daniel