Summe aus aktuellem und vorhergehenden Datensatz

Summe aus aktuellem und vorhergehenden Datensatz

am 20.05.2006 11:54:01 von jan.clauss

Moin ;-)

Ich habe noch keinen Weg gefunden, um folgendes Problem zu lösen:

Ich habe folgende Tabelle für meine Kontos:
id:int
Auszug:int
Konto:int
Buchungsdatum:date
betrag:float(10,2)
summe:float(12,2)

jetzt möchte ich mit einem Update Jeweils den betrag des aktuellen
Datensatzes mit der Summe des vorhergehenden addieren und dann in das
aktuelle Summenfeld eintragen, wobei die Datensätze nach dem
Buchungsdatum und der id geordnet sein sollen. (Die id's sind nicht
unbedingt fortlaufend oder in der korrekten Reihenfolge)

Fehlen tut mir eine Idee, wie ich die Zuordnung aktueller Datensatz zum
Vorhergehenden wie .

Als Datenbank kommt nur mysql 4.1 besser sogar 4.0 in Frage...

Danke

Re: Summe aus aktuellem und vorhergehenden Datensatz

am 20.05.2006 16:06:23 von Helmut Chang

Jan Clauß schrieb:

> Ich habe folgende Tabelle für meine Kontos:

Ich denke, du meinst, du hast folgende Tabelle für deine Buchungen:

> id:int
> Auszug:int
> Konto:int
> Buchungsdatum:date
> betrag:float(10,2)
> summe:float(12,2)
>
> jetzt möchte ich mit einem Update Jeweils den betrag des aktuellen
> Datensatzes mit der Summe des vorhergehenden addieren und dann in das
> aktuelle Summenfeld eintragen,...

Ich denke, das möchtest du nicht.

Du möchtest dir stattdessen eine Tabelle mit deinen Konten anlegen und
in einer 1:n-Relation eine Tabelle mit deinen Buchungen und das Saldo
deines Kontos mit entsprechenden SELECTS eruieren (Ich denke weiters,
dass du mit Summe das Saldo meinst?).

gruss, heli

Re: Summe aus aktuellem und vorhergehenden Datensatz

am 20.05.2006 16:24:30 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: Summe aus aktuellem und vorhergehenden Datensatz

am 20.05.2006 21:28:01 von jan.clauss

Helmut Chang schrieb:
> Jan Clauß schrieb:
>
>> Ich habe folgende Tabelle für meine Kontos:
>
> Ich denke, du meinst, du hast folgende Tabelle für deine Buchungen:
>
>> id:int
>> Auszug:int
>> Konto:int
>> Buchungsdatum:date
>> betrag:float(10,2)
>> summe:float(12,2)
>>
>> jetzt möchte ich mit einem Update Jeweils den betrag des aktuellen
>> Datensatzes mit der Summe des vorhergehenden addieren und dann in das
>> aktuelle Summenfeld eintragen,...
>
> Ich denke, das möchtest du nicht.

Doch denke ich schon...

Die Tabellen für Konto, Kontoauszug und Kommentare existieren extra
noch. Nicht einmal das Feld Konto in obiger Tabelle wird benutz, weil es
sich aus der Tabelle Auszug ergibt,

Select k.id FROM konto AS k, Auszug AS a, buchung AS b WHERE
a.id=b.auszug and k.id=a.kto_id;
....

Diese Frage hatte ich aber nicht gestellt, deswegen habe ich den Integer
konto hier mit aufgenommen, so das für eine Sortierung alle nötigen
Felder vorhanden sind und ich damit das Problem zu erklären gehofft hatte.
>
> Du möchtest dir stattdessen eine Tabelle mit deinen Konten anlegen und
> in einer 1:n-Relation eine Tabelle mit deinen Buchungen und das Saldo
> deines Kontos mit entsprechenden SELECTS eruieren (Ich denke weiters,
> dass du mit Summe das Saldo meinst?).

Ja, der Saldo nach jeder einzelnen Kontobewegung soll im Feld Summe
stehen, so das ichdas Auf und (meistens) ab meines Kontos verfolgen und
später auch mal grafisch ausgeben kann.

Der aktuelle Saldo des Konto's würde in die Tabelle konto gehören, das
sehe ich ein...

Wie gehabt ich möchte auch kein fertiges Statement, nur ein Ansatz,
wegen mir auch ein Sinnvoller Verweis auf das MySL-Handbuch ( in
selbigem bin ich nicht fündig geworden) würde mitr reichen...

Re: Summe aus aktuellem und vorhergehenden Datensatz

am 21.05.2006 09:57:48 von Ralph Ganszky

"Jan Clauß" wrote in message
news:4d98u1F18e6s4U1@individual.net...
> Helmut Chang schrieb:
>> Jan Clauß schrieb:
>>
>>> Ich habe folgende Tabelle für meine Kontos:
>>
>> Ich denke, du meinst, du hast folgende Tabelle für deine Buchungen:
>>
>>> id:int
>>> Auszug:int
>>> Konto:int
>>> Buchungsdatum:date
>>> betrag:float(10,2)
>>> summe:float(12,2)
>>>
>>> jetzt möchte ich mit einem Update Jeweils den betrag des aktuellen
>>> Datensatzes mit der Summe des vorhergehenden addieren und dann in das
>>> aktuelle Summenfeld eintragen,...
>>
>> Ich denke, das möchtest du nicht.
>
> Doch denke ich schon...
>
> Die Tabellen für Konto, Kontoauszug und Kommentare existieren extra noch.
> Nicht einmal das Feld Konto in obiger Tabelle wird benutz, weil es sich
> aus der Tabelle Auszug ergibt,
>
> Select k.id FROM konto AS k, Auszug AS a, buchung AS b WHERE a.id=b.auszug
> and k.id=a.kto_id;
> ...
>
> Diese Frage hatte ich aber nicht gestellt, deswegen habe ich den Integer
> konto hier mit aufgenommen, so das für eine Sortierung alle nötigen Felder
> vorhanden sind und ich damit das Problem zu erklären gehofft hatte.
>>
>> Du möchtest dir stattdessen eine Tabelle mit deinen Konten anlegen und in
>> einer 1:n-Relation eine Tabelle mit deinen Buchungen und das Saldo deines
>> Kontos mit entsprechenden SELECTS eruieren (Ich denke weiters, dass du
>> mit Summe das Saldo meinst?).
>
> Ja, der Saldo nach jeder einzelnen Kontobewegung soll im Feld Summe
> stehen, so das ichdas Auf und (meistens) ab meines Kontos verfolgen und
> später auch mal grafisch ausgeben kann.
>
> Der aktuelle Saldo des Konto's würde in die Tabelle konto gehören, das
> sehe ich ein...
>
> Wie gehabt ich möchte auch kein fertiges Statement, nur ein Ansatz, wegen
> mir auch ein Sinnvoller Verweis auf das MySL-Handbuch ( in selbigem bin
> ich nicht fündig geworden) würde mitr reichen...

Vielleicht hilft dir ein Auszug aus dem Buch SQL FOR SMARTIES von Joe Celko:

23.6.1 Running Totals

....text...

SELECT B0.transaction, B0.trans_date, SUM(B1.amount) as balance
FROM BankAccount as B0, BankAccount as B1
WHERE B1.trans_date <= B0.trans_date
GROUP BY B0.transaction, B0.trans_date

You can use a scalar subquery instead:

SELECT B0.transaction, B0.trans_date,
(SELECT SUM(B1.amount)
FROM BankAccount as B1
WHERE B1.trans_date <= B0.trans_date) as balance
FROM BankAccount B0

....text...

Du musst nur darauf achten, dass hier die Transaktions ID benützt wird um
die Reihenfolge innerhalb eines Tages einzuhalten. Es wird im Buch erwähnt,
dass Banken in der Regel zunächst Einzahlungen verbuchen und dann
Auszahlungen um die kunden nicht fälschlicher weise zu belasten.
Ausserdem arbeitet das Beispiel mit negativen Zahlen für Auszahlungen und
positiven für Einzahlungen.

Dein Update kannst du ja sicher dann daraus basteln.

Gruß
Ralph

Re: Summe aus aktuellem und vorhergehenden Datensatz

am 22.05.2006 09:20:15 von jan.clauss

Jan Clauß schrieb:
> Moin ;-)
>
> Ich habe noch keinen Weg gefunden, um folgendes Problem zu lösen:
>
> Ich habe folgende Tabelle für meine Kontos:
> id:int
> Auszug:int
> Konto:int
> Buchungsdatum:date
> betrag:float(10,2)
> summe:float(12,2)
>
Danke für Eure mühen, bin dann doch den Weg gegangen, mir die Daten per
SELECT zu holen, mit PHP zu berechnen und im Bedarfsfall zu Updaten...
Im Regelfall halten sich so die Updates in Grenzen...