ubuntuusers.de

LibreOffice Base HSQLDB Differenz zwischen zwei Werten ermitteln

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Mankind75 Team-Icon

Lokalisierungsteam
Avatar von Mankind75

Anmeldungsdatum:
4. Juni 2007

Beiträge: 3340

Wohnort: Wernigerode

Hallo und ein frohes 2025, ich hoffe ihr seid alle gut reingekommen.

Ich wende mich mit folgenden Anliegen an euch:

Momentan bin ich dabei für die Wasserabrechnung meines Häuserblocks eine kleine lokale Datenbankanwendung zu entwickeln und habe eine Tabelle für die Zählerstände, die jeweils unter einer eigenen Erfassungs-ID (Primary Key) erfasst werden.

Diese Zählerstände haben jeweils drei Nachkommastellen, was ich im Feld auch so definiert habe und auch entsprechende Werte eingeben kann.

Nun habe ich dann für 2023 und 2024 jeweils Werte und würde gerne einen Query schreiben, der quasi die Differenz zwischen "Wert 2024" und "Wert 2023" ermittelt.

Hierzu habe ich die Dokumentation von HSQLDB bemüht und dort die SQL-Funktion DIFFERENCE dort gefunden aber die gibt wohl nur einen INTEGER als Rückgabewert und dann würden wohl die Nachkommastellen wegfallen nehme ich mal an.

Gibt es eventuell andere Vorgehensweisen oder kann man SQL-Abfragen irgendwie "schachteln"?

Vergebt mir bitte meine Unwissenheit - es ist meine erste Anwendung und mein erstes kleines Projekt nach langer Zeit.

Wie würdet ihr das Thema angehen?

Danke für die Rückmeldungen.

P.S. Bitte keine Rückfragen in die Richtung "Warum nimmst Du nicht eine richtige Datenbank?". HSQLDB scheint mir an sich ganz brauchbar für meine Zwecke und LibreOffice Base läuft halt auf allen Plattformen wie Windows, Linux und macOS.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13152

Du könntest ungefähr so etwas versuchen:

1
2
3
SELECT MIN(val) as min, MAX(val) as max, MAX(val) - MIN(val) as diff
FROM tabelle
WHERE id in ( id1, id2 )

Die ersten beiden Spalten nur zur Anschauung. Interessant wird die Auswahl der Datensätze sein. Da habe ich jetzt feste Ids genommen, aber Du musst vermutlich etwas anderes in WHERE nutzen.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17597

Wohnort: Berlin

HSQLDB habe ich ewig nicht mehr genutzt, aber noch ein altes JAR auf dem Rechner gefunden, 2.6.0 von 2021.

1
2
3
4
5
6
7
8
9
SELECT 	i1.TOTAL AS i1t,
	i2.total AS i2t,
	i1.total - i2.total AS delta 
FROM 	invoice i1, 
	invoice i2
WHERE 	i1.id < 5
AND	i2.id < 5
AND	i1.id = i2.id -1
	;

Invoice ist wohl ein Demotable; die Differenz zw. id1 und id2 ist semantisch natürlich sehr sinnfrei, aber die Syntax funktioniert - darauf kommt es ja im Beispiel an.

Das rechnet mit DECIMALS ohne Probleme, also einfach mit Minuszeichen, ohne DIFFERENCE-Funktion (es sei denn, das wäre das Gleiche).

RKLMs Beispiel macht das auch schon, aber die Aggregationsfunktionen min/max könnten den Leser irritieren.

Ich weiß nicht, in welcher Einheit die Häuserblocks das Wasser abrechnen. Wenn das zu Problemen führt, dann könnte man die Werte bei der Erfassung auch von m³ in Liter umrechnen, um mit Integern arbeiten zu können. Ich habe bei meinen Häuserblocks länger nicht mehr geschaut. ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13152

Ein Problem mit meiner Lösung, die mir gerade auffällt, ist, dass es nie negative Werte gibt. Vermutlich willst Du das aber. Vielleicht braucht man dann doch analytische Funktionen oder eine CTE, mit der man erst die beiden Einzelwerte ermittelt (wenn HSQLDB das kann).

Mankind75 Team-Icon

Lokalisierungsteam
(Themenstarter)
Avatar von Mankind75

Anmeldungsdatum:
4. Juni 2007

Beiträge: 3340

Wohnort: Wernigerode

Danke schon mal für die Rückmeldungen. Hätte ich selbst nicht gekonnt. Es ging halt darum, in den Report den Verbrauch zwischen den einzelnen Messungen reinzubekommen.

Da der Wasserzähler quasi immer hochzählt, ist das nicht so schlimm wenn nur positive Werte rauskommen und das ist okay.

Ein kleines Nugget meinerseits für euch, wahrscheinlich kennt ihr das schon, aber mir ist aufgefallen, dass der SQL-Standard wohl 2023 aktualisiert wurde und HSQLDB den wohl auch mittlerweile in den neueren Versionen implementiert hat. Finde die Datenbankengine eigentlich ganz gut und die Lizenz scheint auch sehr liberal zu sein. Gibt aber sicherlich auch bessere.

Antworten |