Det som jeg efterlyser er en metode hvor jeg kan gennemløbe (og opdatere) alle posterne for de respekive users (fk_user) og re-beregne den korrekte saldo, i dato orden.
Noget i stil med:
For alle fk_users postId opdater saldo med (ForrigepostId.saldo+postId.beloeb)
Jeg har overvejet at smidde hele tabellen ud i Excel og gøre det der, da jeg ikke har den fjerneste ide om hvordan man kan 1) løbe tabellen igennem pr. bruger i datoorden 2) updatere saldo på bagrund af den forrige saldo
Any hints (gerne med SQL eksempler) modtages gladeligt
Jeg har den opfattelse af, at vi ikke er helt enige om hvad rimeligt nemt er...
Det jeg gerne ville lave, var en slags løkke der tog SUM(tidligere poster af Beloeb) og satte det til nuværende post Saldo, for hver enkelt fk_user i stigende datoorden.
Jeg er kommet frem til at jeg må læse lidt op på brugen af cursors, da jeg skal gennekøre denne løkke flere gange.
Først SELECT DISTINCT fk_user Dernæst for hver fk_user SELECT Beloeb, Saldo ORDER BY Dato
Dernæst skal jeg have grejet hvordan jeg fra en af disse ovestående poster, kan finde den forgående post - sikker noget med at smidde det ind i en #tmp tabel..
Her er et eksempel med cursor der løser din opgave:
-- create test table DROP TABLE loebende CREATE TABLE loebende( id bigint IDENTITY(1,1) NOT NULL, fk_user bigint NOT NULL, dato datetime NOT NULL, eventtext varchar(50) NULL, beloeb bigint NULL, saldo bigint NULL, CONSTRAINT PK_loebende PRIMARY KEY CLUSTERED (id ASC) )
-- setup test data delete from loebende insert into loebende (fk_user, dato, eventtext, beloeb, saldo) values (12, '2009-10-13', 'indsat', 300, 322) insert into loebende (fk_user, dato, eventtext, beloeb, saldo) values (14, '2009-10-13', 'ny knt.', 50, 50) insert into loebende (fk_user, dato, eventtext, beloeb, saldo) values (12, '2009-10-14', 'hævet', -200, 122)
DECLARE beloeb_cursor CURSOR FOR SELECT fk_user, dato, beloeb, saldo FROM loebende ORDER BY fk_user, dato
OPEN beloeb_cursor
FETCH NEXT FROM beloeb_cursor INTO @lb_fk_user, @lb_dato, @lb_beloeb, @lb_saldo set @lastuser = 0; WHILE @@FETCH_STATUS = 0 BEGIN if @lb_fk_user <> @lastuser begin set @saldo = 0 set @lastuser = @lb_fk_user end set @saldo = @saldo + @lb_beloeb update loebende set saldo = @saldo where current of beloeb_cursor FETCH NEXT FROM beloeb_cursor INTO @lb_fk_user, @lb_dato, @lb_beloeb, @lb_saldo END
Jeg vidste at det var noget med cursors... tak for hjælpen. Det vil blive testet senere, men det er et ganske glimrende input
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.