mySQL Differenz zwischen zwei Zeilen - Haushaltsbuch, Energieverbrauch etc.

TobiasHeuken

Benutzer
Beiträge
8
Moin zusammen,

ich habe mir eine Datenbank mit allerlei Tabellen angelegt, in die ich eine große Anzahl Daten gespeichert habe, u.a. eine Tabelle für meinen Stromverbrauch, Wasserverbrauch ... oder auch das Kassenbuch eines Stammtisches.

Was ich nach langen Recherchen noch nicht geschafft habe, ist folgendes, z.B. beim Stromverbrauch die Differenz zum Vormonat zu berechnen.

Tabelle: strom
Struktur: id, ablesedatum (Type: date YYYY-MM-DD), zaehlerstand (Type: decimal 9,3)

Hier lese ich 1x monatlich ab. In der Ausgabe komme ich wunderbar eine lange Liste seit 2012 mit Zählerständen.

id______ablesedatum______zaehlerstand
1_______31.05.2012_______32316.000 kWh
2_______30.06.2012_______32372.400 kWh
3_______31.07.2012_______32571.400 kWh
4_______31.08.2012_______32821.200 kWh
5_______30.09.2012_______33118.600 kWh
6_______31.10.2012_______33417.000 kWh


usw. bis heute

Ich möchte nun von der Datenbank automatisch die Differenz, den Verbrauch zum Vormonat berechnen lassen und diese in einer eigenen Spalte ausgeben lassen.

Ich habe dazu zig Workarounds gelesen, die jedoch alle nicht übertragbar waren oder funktioniert haben, da z.B. mit dem Datumsfeldern gerechnet wurde.

Von meinem Verständnis aus, würde der Verbrauch errechnet: aktueller Zählerstand - Zählerstand aus der vorherigen Zeile = Verbrauch


Das gleiche Spielchen - das wäre dann übertragbar, habe ich bei einem Kassenbuch eines Stammtisches.

Tabelle: stammtisch_kasse
Struktur: id, datum (Type: date YYYY-MM-DD), einzahlung (Type: decimal 9,2), auszahlung (Type: decimal 9,2), saldo (Type: decimal 9,2), kommentar

Die Spalte Saldo führe ich "noch" manuell als Einzelfeld ... möchte diese jedoch berechnen lassen. Auch hier müsste ich einen Bezug zur vorherigen Zeile herstellen:

Saldo vorherige Zeile + einnahmen - ausgaben = aktueller Saldo

Die Werte in Spalte Saldo möchte ich eigentlich automatisch berechnen lassen.

Datum______Einzahlung______Auszahlung______Saldo___Kommentar
01.01.2017____82.70 €____________________82.70 €___Anfangssaldo
11.01.2017_____6.02 €____________________88.72 €___Einnahmen Stammtisch
12.01.2017__________________-76.50 €_____12.22 €___Anzeigenkosten
26.01.2017_____2.28 €____________________14.50 €___Einnahmen Stammtisch
08.02.2017_____5.70 €____________________20.20 €___Einnahmen Stammtisch
22.02.2017_____8.99 €____________________29.19 €___Einnahmen Stammtisch


usw. bis heute

Kann mir jemand hier auf die Sprünge helfen, wie ich das Datenfeld der vorherigen Zeile ansteuere, um damit zu rechnen (im Beispiel #1) ... bzw. wie ich auf den Wert zugreife, wenn dieser selber errechnet wird (wie im Beispiel #2)???

Gruß Tobias
 
Zuletzt bearbeitet:
Werbung:
Du brauchst ohne Workaround Version 8 von mySQL.
MySQL LAG() Function Explained By Practical Examples

Datenbanken funktionieren herkömmlich nicht wie Spreadsheet Programme. Auch wenn Du eine Tabelle sortiert ausgibst, kennt die Engine während der Verarbeitung den "vorigen" Datensatz nicht. In der Praxis vielleicht verblüffend, aber es entspricht dem Funktionsprinzip einer relationalen Datenbank.
Erst Erweiterungen, die mySQL mit mit der letzten Version zum Teil auch endlich geschafft hat, erlauben über die genannten Funktionen solche Bezüge.

Wenn es trotz Deiner Recherche nicht funktioniert hat, ist anzunehmen, dass Deine Version ziemlich alt ist. Du müsstest also auf eine neue umsteigen. Wenn Du sowieso umsteigst:
Mit fortschrittlicheren und agileren Systemen hast Du solche Probleme nicht. Mache nicht nur einen Versionswechsel, sondern gleich einen Systemwechsel.
 
Werbung:
Vielen Dank für die Infos ... ja, ich habe gerade mal nachgeschaut ... installiert ist bei mir mySQL 5.7.28 ... aktuell ist mySQL 8.0.19 .... *hüstel* ... ich habe meinen Hoster gerade bzgl. eines Updates angeschrieben ... komischerweise ist die PHP-Version aktuell ... nur mySQL eben nicht.

Mal schauen, was ich als Antwort bekomme ...
 
Zurück
Oben