Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: burns_1987 am Mai 21, 2018, 20:27:22

Titel: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: burns_1987 am Mai 21, 2018, 20:27:22
Hallo liebe Forenmitglieder,

ich habe folgendes Problem und möchte mich vorweg schonmal für jegliche Hilfe bedanken!

Ich habe einen Stromzähler für eine Solaranlage und benötige eine Auswertung für den erzeugten Strom.
Der Zählerstand wird monatlich in eine Tabelle per Formular geschrieben. Jetzt benötige ich die Differenz zum Zählerstands des jeweiligen Vormonats. Wie realisiere ich das in Access?

Ich hoffe, dass ich mich verständlich ausgedrückt habe :-) Dankeschön
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: Beaker s.a. am Mai 21, 2018, 20:41:17
http://www.donkarl.com?FAQ3.11 (http://www.donkarl.com?FAQ3.11)
sollte helfen
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: burns_1987 am Mai 22, 2018, 10:15:03
Guten Morgen und vielen Dank für die schnelle Hilfe!

Ich werde daraus leider nicht schlau - sorry!

Also, ich habe in einer Tabelle "Stromverbrauch" mit den Feldern:

- s_erzeugung (hier werden die monatlichen Zählerstände erfasst, die die Solaranlage erzeugt)

- s_einspeisung (hier werden die Zählerstände erfasst, die an den Stromversorger abgegeben werden)

- s_stromversorger (hier werden die Zählerstände des Stromversorgers angezeigt, da man Strom zukaufen muss, wenn die Solaranlage nicht produtziert)

Die Daten sind immer fortlaufend und werden nicht jeden Monat auf 0 gesetzt.

Und jetzt muss für das Feld für jeden einzelnen Zähler die Differenz gezogen werden zum jeweiligen Vormonat.

Es wäre lieb, wenn ihr mir als Access-Neuling weiterhelfen könntet.

Vielen, vielen Dank!
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: MzKlMu am Mai 22, 2018, 10:29:22
Hallo,
die FAQ 3.11 beschreibt das genau. Was verstehst Du daran nicht ?

Wie wird der Maonat erfasst, als Datum (wie es sein sollte) oder als Monat und Jahr (jeweils Zahlen) ?
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: burns_1987 am Mai 22, 2018, 10:37:22
Hi, danke für die Antwort, ich gucke mir das nochmal ganz in Ruhe an, aber ich verstehe das ehrlich gesagt so, als ob eine fortlaufende Nummer, wie bei der ID erzeugt wird (aber ich lese nochmal nach, wahrscheinlich ist irgendwo ein Denkfehler!)

Der Monat bzw. Tag wird jeweils im Datumsfeld mit dem 01.01. (Januar), 01.02. (Februar), etc, erfasst.

Danke nochmal.
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: MzKlMu am Mai 22, 2018, 10:56:48
Hallo,
hast Du den Link in der FAQ ganz unten nicht gesehen ?
Hier ist er noch mal:
https://support.microsoft.com/de-de/help/290136/how-to-create-a-running-totals-query-in-microsoft-access (https://support.microsoft.com/de-de/help/290136/how-to-create-a-running-totals-query-in-microsoft-access)
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: Lachtaube am Mai 22, 2018, 11:12:30
Hier ist ein DBFiddle (https://dbfiddle.uk/?rdbms=postgres_10&fiddle=5cd62507d88e67854a1257a128135dc6) mit Kommentaren, wo Unterschiede zu Access berücksichtigt werden müssen.
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: burns_1987 am Mai 22, 2018, 11:37:49
Zitat von: MzKlMu am Mai 22, 2018, 10:56:48
Hallo,
hast Du den Link in der FAQ ganz unten nicht gesehen ?
Hi MzKlMu,
dankeschön, aber die habe ich bereits offen und bringt mich leider auch ncht weiter  :-[
Da steht immer, es sei ein Syntaxfehler vorhanden. Zudem ist in der Entwurfsansicht der Afrage gar kein Feld "Summe", obwohl das Summenfeld aktiviert ist. Aber ich komme gar nicht aus dem "Feld", da dort der Fehler auftaucht.

Danke euch beiden, den Link von Lachtaube schaue ich mir gleich mal an!
Dankeschön!
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: burns_1987 am Mai 22, 2018, 12:22:04
danke nochmal für den Link, aber im SQL-Code sieht es doch auch so aus, als seien die Daten fix angegeben und im zweiten Codefeld steht, dass dieses nicht für Abfagen zu verwenden ist und im dritten ist mir nicht klar, wo dieser Code reingehört.

Ich bin einfach überfordert und muss mich entschuldigen und bitte zu verstehen, dass der ein oder andere auch mal klein angefangen hat :-)

Danke und Gruß
Fabian
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: Lachtaube am Mai 22, 2018, 12:47:49
Zuerst wird eine View (Auswahlbbfrage) mit drei fiktiven Datensätzen angelegt und angezeigt, die Dich nicht interessieren muss. Sie sollte jedoch drei Zählerstände ausgeben.

Der mittlere Bereich ist derjenige, der für Dich von Interesse sein sollte. Weil PostgreSQL eine andere Syntax für Spitzenwerte verwendet, habe ich jeweils einen Kommentar in der ersten Unterabfrage hinzugefügt, was statt dessen in Access einzusetzen ist. Bei den folgenden zwei Unterabfragen ist analog zu verfahren. Kommentare, das ist der Text beginnend mit -- muss in der SQL-Ansicht einer Access-Abfrage natürlich weggelassen werden und statt daten, wirst Du auch den richtigen Tabellennamen einsetzen müssen. Ggf. muss der Zeitraum des Ablesens noch angepasst werden (Datumsfeld?). Jede Unterabfrage fragt dieselbe Tabelle noch einmal ab und nimmt hier beispielhaft das Jahr multipliziert mit 100 plus der Monatszahl als Kriterium für die äußere Hauptabfrage und jeweils die innere Unterabfrage. Top 1, bzw. Limit 1 im Beispiel reduziert die Anzahl der Datensätze auf genau einen. Eine absteigende Sortierung sorgt dafür, dass nur der jüngste Datensatz berücksichtigt wird. Und das Kriterium bewirkt, dass die zu betrachtenden Datensätze älter als der aktuelle Datensatz sein muss. Die Werte spiegeln immer die Differenz des aktuellen zum vorherigen Datensatz wider. Für den ersten Datensatz ließe sich noch die Null durch 0 ersetzen, falls das wünschenswert ist.

Der letzte (rein informative) Abschnitt zeigt, wie man in einer Datenbank mit modernem SQL-Dialekt (Stand 2008!) das gleiche Ergebnis hervorbringen kann.

Wenn Dir die Umsetzung nicht gelingt, poste bitte in einem Code-Abschnitt (Text markieren und dann den Knopf mit der Raute # in der Antwort drücken) hier eine handvoll Datensätze (einfach aus der Tabelle kopieren) und nenne uns den Tabellennamen.
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 14, 2019, 18:34:06
Hallo Lachtaube,
ich habe versucht, Deinen Code in meiner Abfrage umzusetzen, aber da kommt ein Fehler. Meine Tabelle zur Abfrage ist so aufgebaut:
ID Datum Zaehlerstand
3 01.05.2018 8378,00
4 01.06.2018 8492,00
5 01.07.2018 8607,00
6 01.08.2018 8738,00
7 01.09.2018 8849,00
8 01.10.2018 8979,00
9 01.11.2018 9132,00
10 01.12.2018 9268,00
11 01.01.2019 9430,00
12 01.02.2019 9594,00
13 01.03.2019 9730,00
14 01.04.2019 9877,00
1 01.05.2019 9997,00
2 01.07.2019 10301,00

Der Tabellenname ist TabVerbrStrom
Ich habe es so verändert:
SELECT TabVerbrStrom.Datum, TabVerbrStrom.Zaehlerstand,
       Zaehlerstand - ( select Zaehlerstand     
                       from   TabVerbrStrom as d1
                       where  d1.Datum * 100 < d0.Datum * 100
                       order  by Datum * 100 desc
                       limit  1
                     ) as Zaehlerstand_diff,
     
from   TabVerbrStrom as d0
order  by 1, 2;

Irgendwo habe ich einen Denkfehler.

Gruß Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: DF6GL am Juli 14, 2019, 19:38:13
Hallo,


vermutlich:


ZitatSELECT TabVerbrStrom.Datum, TabVerbrStrom.Zaehlerstand,
       Zaehlerstand - ( SELECT Top 1 Zaehlerstand     
                       FROM     TabVerbrStrom AS d1
                       WHERE  d1.Datum < d0.Datum
                       ORDER  BY Datum DESC
                       
                     ) AS Zaehlerstand_diff,
     
FROM   TabVerbrStrom AS d0
ORDER  BY 1, 2;
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 15, 2019, 06:12:02
Hallo,
danke für die Hilfe, aber es klemmt noch ein wenig, siehe Anhang.
MfG Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: DF6GL am Juli 15, 2019, 09:33:32
Hallo,

füg noch die Alias-Qualifizierer hinzu:


ZitatSELECT d0.Datum, d0.Zaehlerstand,
       d0.Zaehlerstand - ( SELECT Top 1 d1.Zaehlerstand     
                       FROM     TabVerbrStrom AS d1
                       WHERE  d1.Datum < d0.Datum
                       ORDER  BY d1.Datum DESC
                       
                     ) AS Zaehlerstand_diff,
     
FROM   TabVerbrStrom AS d0
ORDER  BY 1, 2;
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 15, 2019, 10:11:21
Hallo,
Danke erst einmal. Ergebniss: gleiche Fehlermeldung.

Gruß Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: DF6GL am Juli 15, 2019, 10:23:24
Hallo,

jaa, man sollte richtig lesen:


das Komma (rot) bei

) AS Zaehlerstand_diff,
FROM   TabVerbrStrom AS d0


ist zu entfernen
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 15, 2019, 11:10:44
Hallo,

super  :), jetzt funktioniert es und ich kann die anderen Abfragen auch so anpassen. Vielen Dank.

MfG Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 15, 2019, 11:48:26
Sorry,
ich habe mich zu früh gefreut. Für die Tabelle TabVerbrKalt konnte ich auch eine funktionierende Abfrage erstellen. Beim Versuch, das auch für die Tabelle TabVerbrWarm zu machen, kommt die Fehlermeldung: Höchstens ein Datensatz kann von dieser Unterabfrage zurückgegeben werden.
Beide Tabellen habe identische Struktur.
Für meinen beschränkten Horizont nicht nachvollziehbar.
MfG Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: DF6GL am Juli 15, 2019, 16:07:03
Hallo,

dann zeigt mal den SQL-String der Abfrage, die nicht geht...

In der Annahme, dass der Zählerstand analog mit dem Datum  wächst, könnte dies funktionieren:

SELECT Max(d1.Zaehlerstand )   
                       FROM     TabVerbrStrom AS d1
                       WHERE  d1.Datum < d0.Datum
                       
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 15, 2019, 17:28:05
Hallo,
für Tabelle "TabVerbrWarm" ist folgender Code:SELECT d0.Datum, d0.Zaehlerstand, d0.Zaehlerstand-(SELECT Top 1 d1.Zaehlerstand                             FROM     TabVerbrWarm AS d1                        WHERE  d1.Datum < d0.Datum                        ORDER  BY d1.Datum DESC                                              ) AS Verbrauch
FROM TabVerbrWarm AS d0
ORDER BY 1, 2;
.
Für Tabelle "TabVerbrKalt" ist dieser Code funktionierend: SELECT d0.Datum, d0.Zaehlerstand, d0.Zaehlerstand-(SELECT Top 1 d1.Zaehlerstand                             FROM     TabVerbrKalt AS d1                        WHERE  d1.Datum < d0.Datum                        ORDER  BY d1.Datum DESC                                              ) AS Verbrauch
FROM TabVerbrKalt AS d0
ORDER BY 1, 2;
.
Ich bin ratlos.
MfG Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: DF6GL am Juli 15, 2019, 18:25:12
Hallo,

es gibt also 3 Tabellen, die gleichartig aufgebaut sind?

Sind sie das wirklich? (--> prüfen!,  auch Datentypen)

Das allerdings verstößt gegen Normalisierungregeln (was hier jedoch nicht das ursprüngliche Thema ist).

Was genau funktioniert denn nicht? Gibt es irgendwelche Fehlerhinweise? Oder stimmen nur die berechneten Wert nicht?

Bitte mal ein paar (authetische) Datenbeispiele.

Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: papanetti am Juli 15, 2019, 18:46:30
Hallo,

vielen Dank für die Bemühungen. Ich glaube, ich werde mich erst einmal hinsetzen und mir die Regeln der Normalisierung und die Grundlagen eines sauberen Datanbankaufbaus zu Gemüte führen. Danach werde ich dann nochmals versuchen, eine Datenbank für mich zu Hause aufzubauen ( Verbräuche für Strom, Wasser und Heizung ), welche dann etwas komfortabler zu händeln ist als meine bisherigen Excel-Tabellen.
Ich bitte um Entschuldigung, dass ich Deine Zeit in Anspruch genommen habe, aber da ich nun selbst genug Zeit habe, das Leben zu genießen, kann ich mir auch noch etwas Wissen aneignen.
Dennoch kann es sicher sein, dass ich mich hier im Forum zurückmelden werde.

MfG Henry
Titel: Re: Differenz zwischen zwei Zeilen der selben Spalte
Beitrag von: Jennifer am September 10, 2019, 10:32:02
Also wenn man mal von dem Fehler in der Normalisierung absieht, würde ich eine Abfrage machen, die immer bei Datum "x.y" Den Wert für "x.y-1" holt und daraus die Differenz berechnet... Aber natürlich drauf achten, dass wenn Y = 1 Wert 0 geholt wird. Oder habe ich das 01.01 falsch verstand und da steht doch noch eine Jahreszahl dahinter, dann wäre natürlich für Datum "x.y.z" Wenn Y= 1 dann "x.1.z-1" sonst "x.y-1.z"
Dann bindest du diese Abfrage in deine mit ein und hast eine Spalte für die Differenzen.