SQL: Laufende Differenz bilden

Aus DBWiki
Wechseln zu: Navigation, Suche

Zurück zur Übersicht



Zur Berechnung laufender Differenzen wird man einen Ausgangswert definieren, von dem eine laufende Summe subtrahiert wird.


Beispielsweise soll für Abteilung 10 eine laufende Differenz der Gehälter berechnet werden, wobei das erste Gehalt des Mitarbeiters mit dem niedrigsten gehalt und der niedrigsten ma_nr die Ausgangsbasis bildet (ein etwas unglückliches Beispiel).



Wiki hinweis.png

Todo: Eine Access-Lösung wäre noch zu entwickeln.


Lösung mittels Window-Funktionen

Unter Nutzung von Window-Funktionen stellt sich eine mögliche Lösung so dar:

SELECT ma_name,
       gehalt,
       SUM( CASE WHEN rnum = 1 THEN gehalt ELSE -gehalt END )
            OVER ( ORDER BY gehalt, ma_nr ) AS lfd_diff
FROM   ( SELECT ma_nr,
                ma_name,
                gehalt,
                ROW_NUMBER() OVER ( ORDER BY gehalt, ma_nr ) AS rnum
         FROM   mitarbeiter
         WHERE  abt_nr = 10) AS t

Die Lösung kann für PostgreSQL in diesem DBFiddle eingesehen werden.



Zurück zur Übersicht