update t as t1join (select id, @s := IF(@prev = klient_id, @s + vklad, vklad) as vklad_celkem, @prev := klient_id from t order by klient_id, datum) as t2 on t1.id=t2.idset t1.vklad_celkem=t2.vklad_celkem;
Citace od: Filip Jirsák kdy 17. 01. 2018, 22:32:33Citace od: Ivan Nový kdy 17. 01. 2018, 19:02:11UPDATE tbl u1, (SELECT (SELECT SUM(vklad) FROM tbl t2 WHERE t1.date >= t2.date AND t1.klient = t2.klient) as vklad_celkem FROM tbl t1) u2 SET u1.vklad_celkem = u2.vklad_celkem;ale bude fungovat jen pokud bude jeden vklad za den, pokud by jich bylo více, musíte tabulky synchronizovat třeba podle nějakého čísla transakce, nebo data i s přesným časem.Tohle řešení je správně (teda pokud je možné v MySQL udělat takovýhle JOIN v UPDATE), ty přidané ORDER BY jsou tam k ničemu, respektive rozumná databáze vám to s nimi ani nedovolí spustit. Vzhledem k tomu, že je řeč o MySQL a je takováhle struktura databáze, o miliony záznamů asi nepůjde.Já bych použil korelovaný subdotaz, připadá mi to čitelnější a nevyžaduje to ten divný UPDATE JOIN, který je myslím specifický pro MySQL:Kód [Vybrat] RozbalitUPDATE tabulka t1 SET vklad_celkem = ( SELECT SUM(vklad) FROM tabulka t2 WHERE t1.klient_id = t2.klient_id AND t2.datum <= t1.datum )
Citace od: Ivan Nový kdy 17. 01. 2018, 19:02:11UPDATE tbl u1, (SELECT (SELECT SUM(vklad) FROM tbl t2 WHERE t1.date >= t2.date AND t1.klient = t2.klient) as vklad_celkem FROM tbl t1) u2 SET u1.vklad_celkem = u2.vklad_celkem;ale bude fungovat jen pokud bude jeden vklad za den, pokud by jich bylo více, musíte tabulky synchronizovat třeba podle nějakého čísla transakce, nebo data i s přesným časem.
UPDATE tabulka t1 SET vklad_celkem = ( SELECT SUM(vklad) FROM tabulka t2 WHERE t1.klient_id = t2.klient_id AND t2.datum <= t1.datum )
Citace od: thcom kdy 17. 01. 2018, 20:48:36Citace od: Lemming kdy 17. 01. 2018, 20:36:50Dělat to opakovaně je samozřejmě nesmysl, ale naplnit na začátku existující tabulku nově rozšířenou o ten sloupec a pak ho plnit automaticky při vytváření každého záznamu, to smysl dává.to ma smysl dokud nenastane editace ve starsich datech
Citace od: Lemming kdy 17. 01. 2018, 20:36:50Dělat to opakovaně je samozřejmě nesmysl, ale naplnit na začátku existující tabulku nově rozšířenou o ten sloupec a pak ho plnit automaticky při vytváření každého záznamu, to smysl dává.
Citace od: Lemming kdy 18. 01. 2018, 06:35:09A ona ta editace někdy nastane? Nevím, o co přesně jde a jaký je zdroj těch záznamů, ale tipuji že to bude poměrně výjimečná situace. A v té se dá projet ten dotaz znovu s omezením na daného klienta.
Citace od: Miroslav Šilhavý kdy 17. 01. 2018, 20:17:22Ano, je to pěkně hloupá myšlenka ukazující na špatný návrh.
Citace od: Filip Jirsák kdy 17. 01. 2018, 22:47:55Citace od: thcom kdy 17. 01. 2018, 20:48:07Citace od: Miroslav Šilhavý kdy 17. 01. 2018, 20:17:22Ano, je to pěkně hloupá myšlenka ukazující na špatný návrh.me nic jineho nenapadlo, potrebuji pri zobrazovani pohybu a stavu portfolia spocitat aktualni podil na celkove investicitakze je lepsi si ten soucet predpocitat, nez poustet celkem zbytecne slozity SUM pri kazdem zobrazeniale rad si necham poradit neco lepsihoTakže nepotřebujete znát historický součet po každém vkladu, ale stačí vám znát aktuální součet (po posledním vkladu). Takže si vytvořte druhou tabulku, kde bude klient_id a vklad_celkem, a tuto tabulku aktualizujte triggerem při změně v tabulce vkladů.
Citace od: thcom kdy 17. 01. 2018, 20:48:07Citace od: Miroslav Šilhavý kdy 17. 01. 2018, 20:17:22Ano, je to pěkně hloupá myšlenka ukazující na špatný návrh.me nic jineho nenapadlo, potrebuji pri zobrazovani pohybu a stavu portfolia spocitat aktualni podil na celkove investicitakze je lepsi si ten soucet predpocitat, nez poustet celkem zbytecne slozity SUM pri kazdem zobrazeniale rad si necham poradit neco lepsiho