Avatar billede Slettet bruger
03. marts 2010 - 13:10 Der er 11 kommentarer og
1 løsning

Balance udregning

Hej

Jeg har et behov for udtræk af transaktioner med automatisk saldo udregning.

Jeg har lavet noget ála nedenstående:

SET @balance=5000;
SELECT id, amount, text, date, ((@balance:=@balance-amount)+amount) AS balance FROM transactions WHERE account_id = 1000;

Dette virker for så vidt også fint nok (det bør kunne gøres nemmere? - uden at skulle forudregne @balance).

Det kan give følgende resultat:

1, 500, test 1, 01-01-2010, 5000
2, 3500, test 2, 03-01-2010, 4500
3, 1000, test 3, 02-01-2010, 1000

Problemet er når jeg vil sortere efter dato - så forbliver saldoen ved den enkelte post og giver fx nedenstående resultat:

1, 500, test 1, 01-01-2010, 5000
3, 1000, test 3, 02-01-2010, 1000
2, 3500, test 2, 03-01-2010, 4500

Hvor det er tydeligt at se, at saldoen er ubrugelig... Nogen med lidt hjælp? :)
Avatar billede preppydude Nybegynder
03. marts 2010 - 14:04 #1
Noget imod at uploade hele koden (http://pastebin.com/)? Så er det lidt nemmere at få et overblik.

Jeg forstår ikke rigtigt dine forklaringer - du vil sortere efter både saldo og dato? Altså noget ala "SELECT .. FROM .. WHERE .. ORDER BY dato, saldo"?
Avatar billede Slettet bruger
03. marts 2010 - 14:41 #2
Nej, jeg vil kun sortere pr. dato, men når jeg sortere efter dato så bliver saldo resultatet ikke arrangeret korrekt...

Jeg har så mange forskellige uvæsentlige faktorer i min kode og database, derfor vil det blot gøre det mere uoverskueligt at ligge hele koden op...

Men det korte af det lange er, at jeg ønsker sådan en oversigt som du kender fra din netbank, hvor du kan se saldoen efter hver transaktion.
Avatar billede arne_v Ekspert
03. marts 2010 - 20:22 #3
Hvorfor vil du lave det i SQL ?

Det må da være 100 gange nemmere at lave i applikatione (PHP/Java/C#/whatever).
Avatar billede preppydude Nybegynder
03. marts 2010 - 20:51 #4
En af de få gange mig og arne faktisk er fuldstændig enige. :D
Avatar billede Slettet bruger
04. marts 2010 - 08:20 #5
Det ender det også med at jeg gør, men havde håbet på at MySql kunne klare det elegant :) tak for Jeres tid...
Avatar billede acore Ekspert
04. marts 2010 - 10:18 #6
Er det så svært?

SET @balance=5000;

SELECT * FROM (
  SELECT id, amount, text, date, ((@balance:=@balance-amount)+amount) AS balance FROM transactions AS tt WHERE account_id = 1000;
) AS tb ORDER BY tb.date;

Jg har godt nok ikke testet det...
Avatar billede Slettet bruger
04. marts 2010 - 16:23 #7
Tjae, af en eller anden årsag så vil balancen ikke blive udregnet efter hvorledes der er sorteret...
Avatar billede arne_v Ekspert
04. marts 2010 - 20:56 #8
En anden gang skal vi nok lade være med at kommentere på dine spørgsmål.
Avatar billede Slettet bruger
04. marts 2010 - 22:29 #9
Come on - jeg skriver bare at det ikke virker :) så er det vist heller ikke værre...
Avatar billede arne_v Ekspert
04. marts 2010 - 22:35 #10
Du postede et problem.
Du fik et forslag til løsning.
Du skrev at du brugte den foreslåede løsning.
Du tog selv point.
Avatar billede Slettet bruger
04. marts 2010 - 22:43 #11
I see... Tja, det kan du selvfølgelig have ret i, sådan havde jeg ikke umiddelbart set på det, da jeg var klar over at det sagtens kunne lade sig gøre uden MySql. Men jeg spørger til om det kan lade sig gøre i MySql uden at få et brugbart svar...

Jeg skal meget gerne oprette en tråd hvor I kan få point - det skal ikke være noget problem... Som sagt havde jeg ikke set sådan på det...
Avatar billede arne_v Ekspert
05. marts 2010 - 03:17 #12
Det virker også ret naturligt ikke at give point for ikke-løsninger.

Men overvej følgende: hvis du spørger om hvordan man gør X ønsker du så at dem som ved at X er umuligt eller dem som ved at det er bedre at gøre Y i.s.f. X skal skrive i din tråd eller at de skal beholde informationen for sig selv?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester