Tabellenwerte zeilenweise vergleichen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

hlerdo
Beiträge: 9
Registriert: Do, 23.09.2010 11:41

Tabellenwerte zeilenweise vergleichen

Beitrag von hlerdo »

Moin moin!

Folgende Aufgabe:
Habe eine Tabelle mit Ablesewerten (Strom und Wasserzähler), aus denen ich für mehrere Parteien die Verbräuche errechnen muss. Sowas wie dieses:

Datum | Zähler1 | Zähler2
01.01.10 | 1000 | 2345
01.02.10 | 1055 | 3456
01.03.10 | 1155 | 4567
...

Ich will jetzt eine Ansicht mit den Verbräuchen erstellen, brauche also die Differenz einer Tabellenzelle von einer Reihe zur nächsten. Denn diese Differenzen werden noch in anderen Ansichten benötigt. Also ein Bericht ist da nicht mein primärer Ansatz.

Diverse Suchergebnisse mit einigen SQL Statements brachten keine Lösung. :(

Hat da jemand eine Idee oder noch besser: Lösung? 8)

Danke schon mal!!

Cheers,
HG
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von Barlee »

Hallo hlerdo,

und Du verwendest HSQLDB?
Welchen Ansatz hast Du denn schon versucht? Lass mal sehen

Gruß Barlee
hlerdo
Beiträge: 9
Registriert: Do, 23.09.2010 11:41

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von hlerdo »

Moin moin!

Nach nochmaligem Durchlesen meines ersten Posts muss meine Anfrage etwas präzisieren, glaube ich... :)

Quelltabelle ist wie o.a. diese:

Datum | Zähler1 | Zähler2
01.01.10 | 1000 | 2345
01.02.10 | 1055 | 3456
01.03.10 | 1155 | 4567
...

Reihe 1 (01.01.10) ist die Start-"Ablese". Was ich erstellen will ist so etwas wie dieses hier (die '-' dienen nur der besseren Formatierung):

---Von----|--Bis------| Tage | Verbrauch1 | Verbrauch2
01.01.10 | 01.02.10|-- 31 -|---- 55 ------|---- 111
01.02.10 | 01.03.10|-- 28 -|---- 100 -----|---- 111
...

Das Ganze soll stattfinden in OOBase 3.2.0 mit dem Sun Report Builder als alleinige Extension. Allerdings brauche ich diese Werte nicht in einem Report, sondern als View, damit ich die Daten noch weiter statistisch und abrechnungsmäßig verarbeiten kann. Auch habe ich nicht nur 2 Zähler, sondern eine ganze Menge. Aber mir geht das um den Ansatz dazu... Und der entfleucht sich mir! 8)

Um die Werte EINER Quell-Zeile mathematisch zu manipulieren, geht es mir nicht (so von wegen SELECT A AS A; B AS B; A+B AS C FROM TABLE). Was ich brauche ist das, was zwischen den Zeilen liegt! :?

OOBase hat HSQLDB, wenn ich mich nicht verlesen habe, richtig? Ich habe mit der Syntax Definition (hier) schon probiert durch ein doppel-select immer paarweise die Zeilen auszulesen, aber irgendwie bekomme ich bei Benutzung von LIMIT immer Fehlermeldungen! Schon allein die Anweisung SELECT * FROM <TABLE> LIMIT 0 1 geht daneben...

Und deswegen kratze ich mich hier am Köpfelein und frage um Rat! :lol:

Cheers,
HG

Edit: Habe beim Blättern dies hier gefunden und werde das mal näher betrachten. Aber das scheint der Ansatz zu sein, den ich suche... Mehr später...
hlerdo
Beiträge: 9
Registriert: Do, 23.09.2010 11:41

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von hlerdo »

Hallo nochmal...

Bei Eingabe von

Code: Alles auswählen

SELECT  a.id, a.wasser_ges, ABS(b.wasser_ges - a.wasser_ges) AS Verbrauch FROM ablesewerte as a, ablesewerte as b where b.id=a.id+1 order by a.id
bekomme ich immer eine Meldung "Table not found" !!???

Order by b.id hat dasselbe Ergebnis...

Tabellenname ist 'ablesewerte' und zwei der vorhandenen Spalten sind 'id' und 'wasser_ges'. :(

Ideen? Wo ist mein (Denk-)Fehler???
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von Barlee »

Hallo hlerdo,

genau der Ansatz ist richtig und wenn Du sogar schon eine fortlaufende ID hast, umso besser.
'Table not found' > schau Dir mal Groß-/Kleinschreibung des Tabellennamen sowie der Spaltennamen an. Ist dort alles ok?

Gruß Barlee
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von DPunch »

Aloha

Wenn die Zähler konsequent einmal pro Monat abgelesen werden, kannst Du es auch auf diese Weise probieren:

Code: Alles auswählen

SELECT
"a"."Datum" AS "Von",
"b"."Datum" AS "Bis",
DATEDIFF('dd',"a"."Datum","b"."Datum") AS "Tage",
("b"."Zähler1" - "a"."Zähler1") AS "Verbrauch1",
("b"."Zähler2" - "a"."Zähler2") AS "Verbrauch2"
FROM "Tabelle1" AS "a", "Tabelle1" as "b"
WHERE
(MONTH("a"."Datum") = MONTH("b"."Datum")-1 AND YEAR("a"."Datum") = YEAR("b"."Datum"))
	OR
	(MONTH("a"."Datum") = MONTH("b"."Datum")+11 AND YEAR("a"."Datum") = YEAR("b"."Datum")-1)
hlerdo
Beiträge: 9
Registriert: Do, 23.09.2010 11:41

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von hlerdo »

Moin Barlee,
Barlee hat geschrieben:genau der Ansatz ist richtig und wenn Du sogar schon eine fortlaufende ID hast, umso besser.
'Table not found' > schau Dir mal Groß-/Kleinschreibung des Tabellennamen sowie der Spaltennamen an. Ist dort alles ok?
Gänsefüßchen........ Nachdem ich nur Gänsefüßchen dazugepackt habe

Code: Alles auswählen

SELECT  "a"."id", "a"."wasser_ges", ABS("b"."wasser_ges" - "a"."wasser_ges") AS "Verbrauch" FROM "ablesewerte" as "a", "ablesewerte" as "b" where "b"."id"="a"."id"+1 order by "a"."id"
ging alles...

:-D

Danke für Deine Hilfe!!

Cheers,
HG
hlerdo
Beiträge: 9
Registriert: Do, 23.09.2010 11:41

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von hlerdo »

Moin DPunch!
DPunch hat geschrieben:Wenn die Zähler konsequent einmal pro Monat abgelesen werden, kannst Du es auch auf diese Weise probieren:
[...]
Danke für die Antwort! Die hat mich erst auf den Gänsefüßchen-Ansatz gebracht!! :lol:

Allerdings wird der erste Zeitraum bei mir ignoriert. Macht aber nix, denn das kriege ich schon raus. Jetzt kann ich erst mal weitermachen!

Danke für Deine Hilfe!!

Cheers,
HG
hlerdo
Beiträge: 9
Registriert: Do, 23.09.2010 11:41

Re: Tabellenwerte zeilenweise vergleichen

Beitrag von hlerdo »

hlerdo hat geschrieben:Allerdings wird der erste Zeitraum bei mir ignoriert.
Korrektur: Alle Zeiträume mit mehr als einem Monat zwischen den Ablesungen!!

Aber das hattest Du ja auch schon angedeutet... 8)

Cheers,
HG
Antworten