Office: (Office 2003) Differenz von Datensätzen in Abfrage

Helfe beim Thema Differenz von Datensätzen in Abfrage in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, auch auf die Gefahr das dieses Thema schon tausendmal diskutiert wurde*boah , (habe glaube ich so zeimlich alle Beiträge gelesen die es... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Reiti2013, 8. August 2013.

  1. Differenz von Datensätzen in Abfrage


    Hallo zusammen,
    auch auf die Gefahr das dieses Thema schon tausendmal diskutiert wurde*boah , (habe glaube ich so zeimlich alle Beiträge gelesen die es gab) drehe ich langsam durch weil ich die Lösung einfach nicht finde.*mad.gif*
    Tausend Versuche ein Ergebnis zu finden waren alle nicht zufriedenstellend, vllt. sind meine Ansprüche ja auch zu hoch...
    Dabei sieht es eigentlich ganz simpel aus.
    Ich habe eine Tabelle erzeugt in der an einem bestimmten Ablesedatum alle Haus-Zahlerstände erfasst werden, ich wollte damir den Jahresverbrauch ermitteln. Das eigentliche Problem ist, das diese Zählung allerdings in unregelmässigen Abständen stattfindet, und vllt. auch schon mal nicht für alle Zähler.
    Alle Beispiele basieren irgendwie immer auf tägliche Erfassung. Danach funktionieren ja auch die Formeln in den Abfragen, allerdings habe ich das Problem das ich bei der unregelmässiger Ablesung keine Differenzberechnungen hinbekomme da ja immer nur Datum-1 ausgewertet wird.
    Ich habe es hinbekommen das ich über die Differenz von DomErster und DomLetzter einen Gesamtverbrauch ermitteln kann, Allerdings würde ich jetzt gerne noch die Differenz zwischen den einzelnen Datensätzen berechnen lassen, was ich allerdings nicht hinbekomme wegen des unregelmässigen Ablesungsdatums.

    Ich habe mal im Anhang als Bsp. die Ablesetabelle angefügt, da kann man vllt. am Besten sehen was ich meine.
    Teilweise sind die Ablesewerte gleich da ich diese Zähler nicht abgelesen habe und automatisch der letzte Wert übernommen wird. Das Ablesedatum ist wie schon oben erwähnt unregelmässig.
    Ich habe auch eingegebene Fehler simuliert in dem ich Datensätze gelöscht habe, dadurch werden allerdings auch die AutoWerte in [ID] nicht mehr fortlaufend gebildet.



    Vllt. ist der Grundgedanke auch verkehrt und es gibt viel einfachere Lösungen, am Ende sollen eigentlich die Differenzen zu den einzelnen Ablesdatis rauskommen und parallel die Verbräuche vom gesamten Jahr.
    Ich wäre Euch unendlich Dankbar wenn jemand vllt. helfen könnte der das Problem für sich gelöst hat.

    Danke im Voraus für die die evtl.helfen können, obwohl diese Thema schon oft genug aufgegriffen wurde.*grins
    Reiti

    :)
     
    Reiti2013, 8. August 2013
    #1
  2. Ein Teil Deiner Probleme kann auch damit zusammenhängen, dass Du eine ziemlich krumme Tabelle zusammengestellt hast - bei den vielen Beiträgen ist Dir bestimmt auch der Begriff Normalisierung untergekommen.

    Dessen ungeachtet: Datensatzdifferenzen kann man z.B. etwa so bilden:
    Code:
    Jahresverbräuche wäre ein ganz anderes Thema. Kannst Du absichern, dass ein Startwert 1.1. und ein Endwert 31.12. über alle vollständigen Jahre vorhanden ist?
     
  3. Hallo Reiti!

    Hast du dir mal donkarls Access-Seiten angesehen? Das ist das was du suchst.

    Ansonsten beachte aber auch den Hinweis von Eberhard zum Thema Normalisierung. Die Zähler gehören in eine eigene Tabelle.

    Grüße
    Ingo
     
    Claypool, 10. August 2013
    #3
  4. Differenz von Datensätzen in Abfrage

    \@Ingo: Eine laufende Summe ist aber im Ergebnis und noch mehr in der Ausführung etwas anderes als eine Differenz zwischen benachbarten Datensätzen.
     
  5. \@Eberhard: Ja, da hast du recht. Da habe ich nicht ordentlich gelesen.
     
    Claypool, 10. August 2013
    #5
  6. Hallo Ebs17,
    erst schon einmal großend Dank für Deine Antwort.*hands
    Bis jetzt habe ich es immer so gemacht das ich am 31.12. ziemlich spät die Zählerstände aufgrnommen habe, diese Daten habe ich dann als Startdaten in den 01.01. vom Folgejahr kopiert.
    Also diese Ablesung ist immer konstant. Ich möchte halt mit der zwischenzeitlichen Ablesung bestimmte Zeiträume erfassen wie im Sommer oder ähnlich um zu heraus zu finden wie hoch die Verbräuche sind wenn bestimmte Zusatzgeräte im Einsatz sind.
    Daher die Nachfrage nach der Möglichkeit die Datensätze gegeneinander auszuwerten. Ich hoffe das ist so richtig ausgedrückt.
    Werde jetzt sofort mal Deinen Vorschlag ausprobieren, muss allerdings zugeben das ich mit dieser SQL Programmierung noch nicht so warm geworden bin.
    Aber... Versuch macht kluch..*mrcool
    Jetzt habe ich allerdings noch ein Problem mit dem Begriff "Normalisierung".
    Wie gesagt bis jetzt habe ich mich mehr oder weniger Laienhaft mit Access beschäftigt, der eine oder ander würde warscheinlich die Hände über dem Kopf zusammenschlagen wenn er meine DB sehen würde, allerdings fand ich waren die Ergebnisse immer anschaubar.

    @ Claypool, auch Dir Danke für die Antwort *hands , den Tipp habe ich auch ausprobiert. Ich habe ja sogar in der Grundtabelle das Feld ID =Autowert angelegt.
    Allerdings hatte ich das Problem das beim Löschen eines Datensatzes (warum auch immer) die ID nicht mehr fortlaufend war und somit die Funktion zur Differenzberechnung (Blablabla ID-1) nicht mehr funktionierte.
    Deswegen wollte ich mit einer Aktualisierungsabfrage die Daten in eine neue Tabelle kopiert werden aber immer mit fortlaufender ID. Diese Tabelle sollte dann Grundlage für alle anderen Abfragen sein.
    Klingt sehr umständlich, oder?

    Danke im Voraus...
    Reiti
     
    Reiti2013, 11. August 2013
    #6
  7. Deine Fragestellung verstehe ich aber so, dass du dir den Verbrauch zum vorherigen Wert anzeigen lassen willst. Das hat Eberhard dir ja gezeigt und er prüft ja auch auf das nächstkleinere Datum.

    In deinem EIngangsthread schreibst du
    Gelöst ist jetzt der erste Teil deiner Frage. Die zweite Frage wäre doch die laufende Summe, oder?

    Grüße
    Ingo
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Claypool, 11. August 2013
    #7
  8. Differenz von Datensätzen in Abfrage

    Das Problem ist halt: Wenn man nicht nur ein wenig Access/Datenbank spielen will, sondern eine richtige Datenbank anlegen will, kommt ganz am Anfang anstrengende und ungewohnte Theorie, die aber in der Nachfolge vieles vereinfacht, weil diese Theorie die Zusammenfassung von Erfahrungen und Erkenntnissen ist. Wenn Du also mit dem Stichwort Normalisierung googelst, wirst Du da eine Unzahl an Treffern finden. Ich nenne mal diesen:
    Tabellen als Relationen mit Attributen

    Im Ergebnis hättest Du eine Tabelle mit folgenden Feldern:
    - Eine Datensatz-ID (immer gut),
    - eine Datumsspalte,
    - ein Feld Zählerstand,
    - ein Feld mit der Kennzeichnung des Zählers.

    Gleiche Informationen (= Zählerstände) sind dann also in einem Feld. Es entstehen also mehr Datensätze und weniger Spalten. Effekt wäre z.B., wenn man einen Zähler zwischendurch abliest (z.B. wegen Vertragswechsel), müssen nicht die Stände der anderen Zähler hilflos mitkopiert werden.
     
  9. Ein Jahresverbrauch ergibt sich aus der Differenz der Zählerstände zwischen dem 31.12. (bzw. dem max. Datum im Jahr) und dem 1.1. des Jahres (bzw. dem minimalen Datum im Jahr).
    Aus einer laufenden Summe, deren Ermittlung für sich eine aufwändige Operation ist, müssten für Jahresverbräuche auch zusätzlich die Differenzen aus Beginn und Ende im Jahr ermittelt werden.
     
  10. Hi zusammen, ich habe die Formel jetzt mal ausprobiert. Gehe ich recht in der Annahme das ich bestimmte Variablen durch meine ersetzen muss?
    Ich habe mal ein Foto angehängt wie ich getauscht habe.
    Beim Ausführen bekomme ich allerdings eine Fehlermeldung die lautet:

    Sie haben eine Unterabfrage erstellt, die mehr als ein Felder zurückgeben kann, ohne das reservierte Wort EXISTS im FROM-Abschnitt der Hauptabfrage zu verwenden. Überarbeiten Sie die SELECT-Anweisung der Unterabfrage, damit nur ein Feld abgerufen wird.

    Scheint wohl irgendetwas zu fehlen.
    Reiti
     
    Reiti2013, 11. August 2013
    #10
  11. Die "Formel" ist keine Formel, sondern eine SQL-Anweisung.
    Darin wären Feldbezeichnungen durch Deine Feldbezeichnungen zu ersetzen, und die Tabellenbezeichnung durch Deine Tabellenbezeichnung. Die Aliase lässt Du aber bitte schön in Ruhe, denn die haben eine funktionale Bedeutung.
     
  12. Hi, ich habe das Feld jetzt mal von ganz vorne aufgerollt und eine neue Tabelle erzeugt wie vorgeschlagen:
    --------------------------------------------------------
    Im Ergebnis hättest Du eine Tabelle mit folgenden Feldern:
    - Eine Datensatz-ID (immer gut),
    - eine Datumsspalte,
    - ein Feld Zählerstand,
    - ein Feld mit der Kennzeichnung des Zählers.
    --------------------------------------------------------
    Die neue Tabelle enthält folgende Felder:
    -ID
    -StromZählerNr
    -Ablesedatum
    -Zählerstand

    Dann habe ich auf diese Tabelle eine Abfrage erzeugt mit den einzelnen Datenfeldern und in einem freien Feld über Shif&F2 das SQL Fenster geöffnet und den SQL Code eingegeben:

    SELECT
    A.Ablesedatum,
    A.Zählerstand,
    (
    SELECT
    B.Zählerstand
    FROM
    tblZaehlerstand AS B
    WHERE
    B.Ablesedatum =
    (
    SELECT
    Max(C.Ablesedatum)
    FROM
    tblZaehlerstand
    WHERE
    C.Ablesedatum < A.Ablesedatum
    )
    ) AS Vorwert,
    A.Zählerstand - IIf(Vorwert Is Null, 0, Vorwert) AS Diff
    FROM
    tblZaehlerstand AS A

    Ich habe nur den Wert "Zählerstand" und denTabellennamen in "tblZaehlerstand" verändert. Alles andere habe ich so gelassen.
    Wenn ich die Abfrage jetzt ausführe bekomme ich wieder die selbe Fehlermeldung:
    Sie haben eine Unterabfrage erstellt, die mehr als ein Felder zurückgeben kann, ohne das reservierte Wort EXISTS im FROM-Abschnitt der Hauptabfrage zu verwenden. Überarbeiten Sie die SELECT-Anweisung der Unterabfrage, damit nur ein Feld abgerufen wird.

    Muss der SQL Code anders eingegeben werden? Habe ich die Daten richtig geändert?
    Danke für deine Geduld.
     
    Reiti2013, 11. August 2013
    #12
  13. Differenz von Datensätzen in Abfrage

    Hallo,
    Du gehst das Problem meiner Ansicht nach falsch an, baue dir erstmal eine ordentliche tabellenstruktur, wie schon gesagt wurde, in der tabelle solltest du nicht, wie du es gemacht hast, ein feld Stromzähler nr haben, sondern ein feld zb zaehlerartID, damit kannst du mit einem feld alles "erschlagen" was mit Zählern zuntun hat. Du musst dafür eine eigene tabelle zaehlerart schaffen und in dem eingabeformular für die standerfassung diese tabelle mit einem kombifeld einbauen....
    Wenn du das erstmal hinbekommen hast, kannst du weitermachen,

    Also 1. Die struktur der tabellen "richten"
    2. Denk weiter darüber nach, was du noch brauchen könntest an tabfeldern
    3. Bau dir ein erfassungsformular mit den neuen tabellen
    4. Wenn du das einigermaßen durchdacht und hinbekommen hast versuche dich mit der auswertung, denn je besser du vorarbeitest, umso einfacher wird die auswerterei..

    Ich würde mich dann für die Berechnungen mit der vba umgebung beschäftigen, ich habe bessere Erfahrungen damit gemacht, berechnungen innerhalb vba durchzuführen,
    Ich spreche da aus Erfahrung, da ich eine abrechnungssoftware für wasser im einsatz habe, also stand, stand neu, verbrauch, abrechnung..... usw...

    Bei bedarf frag einfach nochmal nach..
    Hast du die Möglichkeit, eine neuere access version zu nehmen? Wenn ja nimm eine neuere.....
     
  14. Ok, am Anfang steht der Schweiss, verstehe.
    Ich habe schon versucht so was fertig zu kaufen allerdings war das dann so umfangreich das ich ich mir das schnell wieder überlegt habe.
    Trotzdem vielen Dank für Deine Hilfe, werde mich mal weiter durchwühlen...
    Ist ja auch ein learning by doing Effekt....

    Sollte ich was erreicht haben werde ich mich dann wieder melden...
    Danke.
    Reiti.*depressed *depressed
     
    Reiti2013, 11. August 2013
    #14
  15. Code:
    Wenn man einen Alias (hier C) verwendet, muss man ihn auch definieren. Das war jetzt mein Unterlassungsfehler.

    Wenn nun wie vorgeschlagen die Tabelle umgestellt ist, muss natürlich die StromZählerNr mitverwendet werden, damit nur von den richtigen Datensätzen die Differenzen gebildet werden.
    Also insgesamt etwa:
    Code:
    Für StromZählerNr würde natürlich besser die Zähler-ID stehen. Für die Abfrage hier hat das aber eine untergeordnete Bedeutung.
    Warum? Welche Features neuerer Versionen würden hier etwas verbessern?

    Was man selber tut, bleibt einem natürlich selber ungehalten.
    Als Empfehlung an andere ist das aber unschön (gelinde ausgedrückt).

    Wenn man schon eine relationale Datenbank baut, die dann auch auf Anwendbarkeit von SQL getrimmt ist, sollte man dann SQL als das weitaus mächtigere Werkzeug für Massendatenverarbeitung verwenden und erst auf den Ersatz VBA zurückgreifen, wenn es in der Wirkung genau so stark ist oder wenn Dinge zu erledigen sind, die SQL nicht kann.

    Davor ist ein solcher Hinweis eher so zu verstehen, dass man (noch nicht) in der Lage ist, eine passende richtige SQL-Anweisung zu erstellen.
     
Thema:

Differenz von Datensätzen in Abfrage

Die Seite wird geladen...
  1. Differenz von Datensätzen in Abfrage - Similar Threads - Differenz Datensätzen Abfrage

  2. Wenn der Wert größer ist als 10 will ich die Differenz in einer Spalte haben

    in Microsoft Excel Hilfe
    Wenn der Wert größer ist als 10 will ich die Differenz in einer Spalte haben: Hallo zusammen, auf dem Bild im Anhang ist mein Zeiterfassungssystem zusehen. Spalte E ist meine Gesamtstundenzahl, wenn diese Zahl größer ist als 10 möchte ich die Differenz daraus in Spalte I...
  3. Differenz zwischen Daten - Anzeige in Tage/Stunden/Minuten

    in Microsoft Excel Hilfe
    Differenz zwischen Daten - Anzeige in Tage/Stunden/Minuten: Hallo zusammen, mit folgender Formel ermittele ich den Unterschied zwischen zwei bestimmten Datumangaben (inkl. Uhrzeit) =NETTOARBEITSTAGE(G5;H5)-1-REST(G5;1)+REST(H5;1) Funktioniert auch...
  4. Differenz zwischen zwei Uhrzeiten mit Sekunden angabe

    in Microsoft Excel Hilfe
    Differenz zwischen zwei Uhrzeiten mit Sekunden angabe: Hallo zusammen, ich würde gerne ein WENN Funktion aufbauen für die Differenz zwischen zwei Zeitstempel. Mit folgenden Bedingungen mit Beispielen: zwischen 00:59:00 und 01:00:25 VERSPÄTET...
  5. Pivot Planzahlen mit Pivot Istzahlen in neuer Pivot vergleichen

    in Microsoft Excel Hilfe
    Pivot Planzahlen mit Pivot Istzahlen in neuer Pivot vergleichen: Hallo, ich suche mir den Wolf nach einer Lösung. Haushaltsbuch, Tabelle mit Istwerten, daraus eine Pivot erstellt. Spalten sind die Monate, Werte sind dich Ausgaben. Zeilen sind die Einnahme bzw....
  6. Kunden Bestell-Intervall

    in Microsoft Access Hilfe
    Kunden Bestell-Intervall: Hallo zusammen, Ich hoffe weiterhelfen kann denn ich verzweifele gerade. Vor ab sei einmal gesagt, dass ich SQL nicht beherrsche. Ich kann zwar Code eingeben, verstehe aber leider nicht was ich da...
  7. Differenz zwischen Datensätzen in Abfrage

    in Microsoft Access Hilfe
    Differenz zwischen Datensätzen in Abfrage: Guten Tag, ich möchte eine Abfrage erhalten die aus Folgender Tabelle (Minimalbeispiel): Datum(PK), Unternehmen (PK), Umsatz 31.12.2019, Company A, 10000 31.03.2020, Company A, 12000...
  8. Differenz zwischen zwei Datensätzen

    in Microsoft Access Hilfe
    Differenz zwischen zwei Datensätzen: Hallo, Ich erstelle gerade eine Datenbank für den Energieverbrauch einer Fernwärmeanlage. Für jeden Tag wird ein Zählerstand abgelesen. z. B: Datum Zählerstand 05.04.2008...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden