Projekt PV-Monitor - Differenz zweier aufeinander folgender Datensätze ermitteln

Draci009

Benutzer
Beiträge
7
Hallo Zusammen,

ich hätte hier ein ähnliches Problem wie bei meiner ersten Frage hier im Forum zum Projekt PV-Monitor. Ich habe nun schon sehr lang gegoogelt aber ich bekomme es leider nicht hin.
Die Lösungen für sehr ähnliche Fragestellungen die ich gefunden habe wollen leider nicht funktionieren.
Ich arbeite mit phpmyAdmin und wenn ich den angepassten Lösungscode starte dann bekomme ich immer diverse Syntaxfehler.

Folgende Tabelle mit Einträgen:

id, wert
8, 1000
8, 950
8, 800
8, 720
8, 610
8, 500
usw.

Was ich suche ist, wie man jeweils den vorhergehenden Wert vom aktuellen Wert abziehen kann.

Ziel:
id, wert, Differenz
8, 1000, 50
8, 950, 150
8, 800, 80
8, 720, 110
8, 610, 110
8, 500, xxx

Ich hoffe die Lösung ist ähnlich einfach wie die für mein erstes Problem ;-)

VG
Robert
 
Werbung:
gähn...

Code:
test=*# select * from draci009 ;
 id | wert
----+------
  1 | 1000
  2 |  950
  3 |  800
  4 |  720
  5 |  610
  6 |  500
(6 rows)

test=*# select id, wert, wert - lead(wert) over (order by id)  from draci009 ;
 id | wert | ?column?
----+------+----------
  1 | 1000 |       50
  2 |  950 |      150
  3 |  800 |       80
  4 |  720 |      110
  5 |  610 |      110
  6 |  500 |         
(6 rows)
 
Anzumerken ist: Deine ID-Spalte ist für den Abfall. Du benötigst eine Spalte, die EINDEUTIG den Vorgänger/Nacholger definiert. Das kann ein fortlaufender Zähler sein, ein Timestamp. Irgend etwas, was eindeutig das kennzeichnet. Deine ID ist immer 8. Das ist also immer Müll.
 
Hallo,

vielen Dank wiedermal für Deine tolle und schnelle Hilfe. Hat wunderbar funktioniert und ich bin begeistert wie einfach das doch wieder war wenn man weiß wie.

Mit der ID Spalte hast Du natürlich recht, ich hatte vergessen, dass es noch eine ts (timestamp) Spalte gibt die, die benötigte Eindeutigkeit erzeugt.
Wenn ich mir die Syntax so ansehe ... wie wäre diese, wenn ich nicht die obere Zeile von der unteren abziehen will sondern die untere von der oberen?

Ich habs mal spontan mit "select id, wert, lead(wert) - wert over (order by id) from tabelle" probiert aber das klappt nicht.
Da wird es wohl anstatt lead eine andere Syntax geben, oder?

Hast Du eventuell eine Empfehlung für mich für eine gute Quelle wo solche Informationen zu finden sind?
Das Web ist natürlich voll davon aber so eine einfache Lösung wie von Dir hier habe ich ehrlich gesagt nirgends gesehen.
Ging alles entweder über Unterabfragen oder JOIN usw. und ich muss gestehen, dass ich nicht erst ein SQL Studium machen möchte nur um mir die Daten aus der PV-Anlage sauber anzeigen zu lassen. Na gut, man könnte sich auch eine fertige Lösung kaufen aber etwas basteln und probieren ist schon nicht schlecht ;-)

VG
Robert
 
Werbung:
Informationsquellen?
Auf den ersten Blick gibt es nicht viel, außer Standard SQL und eben Window Functions. Damit deckt man "alles" ab.
Window Functions erweitern "Standard" SQL um Möglichkeiten, wie man sie am ehesten aus Spreadsheetsoftware kennt und stellen eigentlich die Grundprinzipien eines RDBMS auf den Kopf.
Auch diese Window Functions sind aber schon länger ein Quasistandard, den man nahezu identisch bei einigen DB Herstellern findet. Bei PostgreSQL schon recht lange, bei mySQL "ganz neu" und nicht so ausgebaut. Was Du an Möglichkeiten gefunden hast, waren wahrscheinlich immer Workarounds für Systeme wie eben mySQL, die es halt nicht besser können. (Wobei "Vorgänger" und "Nachfolger" wirklich Window Functions Basics sind, bei mySQL ja seit V8 auch endlich verfügbar).
Kurz gesagt, Du nutzt nicht die verfügbaren Möglichkeiten.
Postgres bietet eine sehr große funktionale Vielfalt, hochspezialisierte Indizierungsvarianten, ein Extension System, das z.B. die Connectivität zu Drittsystemen verbessert, Kreuztabellen erzeugt, uvma., Verarbeitungsmöglichkeiten für "Externe Datenformate" wie XML, JSON, gute Doku, lebendige Community. Mehr bekommt man nicht für kein Geld.
 
Zurück
Oben