Abfrage mit Berechnungen durchführen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

uli38
**
Beiträge: 37
Registriert: Do, 13.11.2008 18:24

Abfrage mit Berechnungen durchführen

Beitrag von uli38 »

Hallo.
Ich habe eine Tabelle, in der Zählerstände erfasst werden. Mittels einer Abfrage soll soll pro Zähler an einem Ablesedatum der Verbrauch berechnet werden.
Für einen Datensatz bekomme ich das hin. Nur leider kann ich immer nur einen Zähler auswerten:

Code: Alles auswählen

SELECT "Zähler-ID", "Zähler-Nummer", "Ablesedatum", "Zählerstand", "Zählerstand" - ( SELECT "Zählerstand" FROM "Elektro-Zählerstände" AS "Elektro-Zählerstände" WHERE "Zähler-ID" = '1' AND "Ablesedatum" = {D '2008-03-29' } ) AS "Verbrauch" FROM "Elektro-Zählerstände" AS "Elektro-Zählerstände" WHERE "Ablesedatum" = {D '2008-12-13' }
Hat jemand eine Idee, wie ich hier eine Schleife einbauen kann?

Schon jetzt vielen Dank!
Gruß
Uli
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Abfrage mit Berechnungen durchführen

Beitrag von Barlee »

Hallo uli38,

eine Schleife mit Base geht meines Wissens nicht.
Zu Deiner Aufgabenstellung würde ich folgende Lösung verfolgen:
1) Hinzufügen einer laufenden Nummer für jedes Ablesedatum einer ZählerID und Speichern der Abfrage als View (rechte Maustaste auf die Abfrage >> "als Ansicht erstellen")
2) Abfragen des Views. Neben dem aktuellen Zählerstand lässt man sich nun den Stand vom letzten Ablesedatum des Zählers anzeigen, indem man anhand der laufenden Nummer den Datensatz mit dem letzten Ablesedatum für den Zähler sucht
3) Letztendlich bildet man die Differenz zwischen dem aktuellen Zählerstand und dem daneben gelisteten Stand des letzten Ablesens und erhält somit den Verbrauch

Beispiel:
die Ausgangstabelle "Tab_Zähler"
Tab_Zähler.jpg
Tab_Zähler.jpg (13.59 KiB) 799 mal betrachtet
Aus folgender Abfrage wird ein View "Tab_Zähler_V" erstellt

Code: Alles auswählen

SELECT 
( SELECT COUNT( "Wert" ) FROM "Tab_Zähler" AS "x" WHERE "x"."Ablesedatum" >= "Tab_Zähler"."Ablesedatum" AND "x"."Zähler" = "Tab_Zähler"."Zähler" ) AS "lfd_NR", 
"Zähler", 
"Wert", 
"Ablesedatum" 
FROM 
"Tab_Zähler"
 

...jetzt wird der View abgefragt

Code: Alles auswählen

SELECT 
"lfd_NR", 
"Zähler", 
"Ablesedatum", 
"Wert" as "Zählerstand", 
( SELECT "Wert" FROM "Tab_Zähler_V" AS "x" WHERE "x"."lfd_NR" = "Tab_Zähler_V"."lfd_NR" + 1 AND "x"."Zähler" = "Tab_Zähler_V"."Zähler" ) AS "letzter_Zählerstand",
"Wert" - ( SELECT "Wert" FROM "Tab_Zähler_V" AS "x" WHERE "x"."lfd_NR" = "Tab_Zähler_V"."lfd_NR" + 1 AND "x"."Zähler" = "Tab_Zähler_V"."Zähler" ) AS "Verbrauch"
FROM 
"Tab_Zähler_V"
order by "Zähler", "Ablesedatum" desc
mit folgendem Ergebnis:
Tab_Zähler_Ergebnis.jpg
Tab_Zähler_Ergebnis.jpg (19.77 KiB) 795 mal betrachtet
Der Vorteil ist, dass Du den Verbrauch fortlaufend auswerten kannst und nicht immer das jeweilige Ablesedatum als Parameter angeben musst.

Gruß Barlee
Antworten