Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

mySQL Differenz zwischen zwei Zeilen - Haushaltsbuch, Energieverbrauch etc.

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von TobiasHeuken, 3 Oktober 2020.

  1. TobiasHeuken

    TobiasHeuken Benutzer

    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: 3 Oktober 2020
  2. akretschmer

    akretschmer Datenbank-Guru

    das geht über Window-Funktionen wie lead() und lag(). Die Doku sagt Dir mehr darüber.
     
  3. dabadepdu

    dabadepdu Datenbank-Guru

    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.
     
  4. TobiasHeuken

    TobiasHeuken Benutzer

    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 ...
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden