Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

sql zusammen fügen[ gestern-heute ]

Begonnen von joerg007, November 13, 2016, 19:44:32

⏪ vorheriges - nächstes ⏩

crystal

Hallo joerg007,

nach deiner neuen Meldung habe ich mich nochmal mit dem Thema befasst und dir eine Lösung beigefügt.

Schau dir bitte zuerst die Tabelle an. Darin sind zwei Felder Tank und Produkt enthalten. Außerdem habe ich bewusst Lücken in den täglichen Füllständen gelassen.

Es gibt dann 3 Abfragen:
qryGetAll stellt alle Füllstände und die Differenz zum vorigen Erfassungstag dar (kann ja auch schon mehrere Tage her sein). Diese Abfrage wird intern benutzt, könnte aber auch als Ausgangsbasis z. B. für grafische Darstellungen dienen.

qryGetPrevious dient dazu, den vorigen Stand zu ermitteln und wird intern in einer DomWertFunktion benutzt. Sie dient eigentlich nur dazu, ein absteigendes Sortierkriterium definieren zu können.

qryGetLast stellt dann nur den aktuellen Füllstand und den Füllstand am letzten Messtag dar, für jeden Tank (und Produkt).

Kurze Diskussion meiner Lösung:
1. Es ist nicht erforderlich, jeden Tag einen Füllstand-Messwert zu haben, es können Tage ausgelassen werden (z.B. Sonntage).
2. Die Lösung berücksichtigt Tank und Produkt (beide sind als numerische Felder definiert, damit es mit der DomWert-Funktion etwas einfacher ist). Dies kommt der Praxis vermutlich nah, weil beide Felder Referenzen auf entspr. Tabellen darstellen werden. Es wäre möglich, z.B. Tank 22 irgendwann für ein anderes Produkt zu benutzen, oder ein Produkt auf verschiedene Tanks zu verteilen (hab ich allerdings nicht getestet).
3. Die Tabelle weist keine besonderen Indizierungen auf; der Index TaPr diente nur zu Testzwecken.
4. Die Lösung kommt ohne VBA aus.
5. Die Lösung ist jedenfalls zum Teil getestet und real (Gruß an Eberhard).

Schau einfach mal, ob du damit etwas anfangen kannst. Die Umsetzung in deine Umgebung ist vielleicht etwas aufwändig wegen der unterschiedlichen Objekt-Namen...

lg
crystal

PS: Mag sein, dass Dlookup in Queries nicht optimal ist (Performance), aber bei der anzunehmend überschaubaren Zahl von Tanks ist das wohl zu verkraften.

PPS: wie immer würde ich mich über sachliche Kritik meiner Lösung freuen und bitte darum, sie zu verbessern.

Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

ebs17

Eine aufschlussreiche Demo.
Eine alleinige Gruppierung auf den Primärschlüssel einer Tabelle in einer Abfrage habe ich bisher noch nicht gesehen, und keine Angst: Da schreibe ich nicht ab.
Mit freundlichem Glück Auf!

Eberhard

crystal

Hallo,
lieber Eberhard, warum beschreibst du nicht einfach, was da genau falsch ist? Mit dieser Aussage kann doch niemand etwas anfangen:

ZitatEine alleinige Gruppierung auf den Primärschlüssel einer Tabelle in einer Abfrage habe ich bisher noch nicht gesehen, und keine Angst: Da schreibe ich nicht ab.

Und ob du das abschreibst oder nicht, interessiert auch nicht.

Bitte, lieber Eberhard, ringe dich dazu durch, Kritik konstruktiv zu äußern und klar verständlich, nich kryptisch und verklausuliert. Andere Menschen sollen es doch auch verstehen und möchten gern von deinem Experten-Wissen profitieren.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

joerg007

besten dank  :)

da sieht man wer ahnung von access hat und wer gerade damit anfängt  ;)

werde wohl deine version  lernen zu verstehen und später einsetzen

Frohe Weihnachten allen ! :)  ;)

crystal

Danke Joerg!

Nur um Missverständnissen vorzubeugen:
Ich habe auch nicht viel Ahnung von Access (Eberhard hüpft ob dieser Aussage spontan ca. 1m50 senkrecht in die Luft), vielleicht nur ein wenig mehr als Anfänger.
Ich versuche nur, mich Problemen der Fragesteller zu widmen und zu probieren, ob ich eine Lösung finde (OK - macht Eberhard natürlich auch).

Sicher ist es möglich, dass meine "Lösungen" nicht immer optimal sind. Sie sind ja in erster Linie auch Diskussionsbeiträge, die oft aber weit konkreter und vielleicht auch hilfreicher sind als "philosophische Versuche" anderer.

So freut es mich, wenn du dich mit meiner Lösung anfreunden und sie nachvollziehen kannst. Vielleicht kann sich Eberhard doch noch erweichen und seine konstruktiven Verbesserungen posten. Das wäre sicher schön und würde ja dem Zweck dienen, nicht wahr...

Ich hatte ja auch extra für ... geschrieben:

ZitatPPS: wie immer würde ich mich über sachliche Kritik meiner Lösung freuen und bitte darum, sie zu verbessern.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

ebs17

Zitatwas da genau falsch ist?
Vorab: In den Begriff Fehler legen unterschiedliche Personen unterschiedliche Inhalte hinein. Was also für den einen ein Fehler ist, ist für den anderen gut. Daher hatte ich nur festgestellt, aber keine Wertung abgegeben. Das kann ja jeder für sich selber tun.

Gruppierung auf einen Primärschlüssel heißt, es kann keine Änderung im Vergleich zur Ausgangstabelle geben, da man einen eindeutgen Wert nicht zusammenfassen kann, die beiliegenden Aggregierungen sind damit auch wirkungslos.
Die einen sagen dazu, Aktion ohne Ergebnis ist Beschäftigung der Maschine und verschenkte Zeit (abgearbeitet muss es ja trotzdem werden). Wenn man nach Effizienz bezahlt wird, ist das ein Mangel.
Andere können sagen: Da steht schon mal Code, sieht wichtig aus, und funktionieren tut es auch noch. Wenn man nach Codezeilen bezahlt wird, hat man einen Schritt nach vorne getan.

In ähnlicher Weise könnte man sich auch zu den bereits eigenvermuteten Problemen äußern.

Bezüglich konstruktiver Verbesserungen: Eine Lösung orientiert sich an der Aufgabenstellung - ein gutes Pferd springt nur so hoch wie es muss. In einer DB-Lösung sichert man zusätzlich vorab Erweiterungsfähigkeit ab, sprich wenn die Datensatzanzahl von 25 auf 250k steigt, sollte sich nicht die Notwendigkeit der Umprogrammierung ergeben.
Wenn ich im Zusammenhang mit der genannten Abfrage die genannten Ausgangsbedingungen, wie sie zu verstehen waren, noch einmal deutlich festgezurrt habe, so heißt das nicht, dass zu einer anderen und vmtl. umfangreicheren Aufgabenstellung keine Lösung erstellbar wäre. Eine solche Aufgabenstellung müsste aber erst einmal formuliert werden. Diese Nachfrage scheint aber für den TE nicht relevant zu sein, womit das dann auch abgeschlossen ist.

Mit freundlichem Glück Auf!

Eberhard

crystal

Lieber Eberhard,

danke für deinen langen Text.
Leider wirst du auch jetzt nicht ausreichend konkret. Bitte benenne doch einfach genau, was an meiner Lösung oder meinem Ansatz falsch oder nicht OK ist. Nehme einfach meine DB und verbessere sie, damit Joerg eine - nach deiner Meinung - vernüftige Lösung erhält.

Das wäre doch viel besser, als hier Allgemeinplätze zum Besten zu geben. Aber ich fürchte, dass du das aus irgendwelchen, nicht erklärlichen Gründen nicht tun möchtest. Vielleicht liegt's an mir.

Schade, denn wir kennen dich als erfahrenen Accessler und es wäre wirklich schön, deine Lösung zu sehen, die sich freilich an den offensichtlichen Gegebenheiten des Fragenden orientieren müssten, also nicht an akademischen Betrachtungen zur Daten-Modellierung und praxisfernen Was-wäre-wenn-Szenarien.

Bitte, Eberhard, gebe dir den kleinen Schubs und pflücke meine "Lösung" im Detail auseinander, damit andere auch etwas davon haben. Es geht um die Sache und nicht um Eitelkeiten...

lg
crystal

PS: Schade, ich sehe gerade, dass du offline bist und ja leider geschrieben hast
ZitatDiese Nachfrage scheint aber für den TE nicht relevant zu sein, womit das dann auch abgeschlossen ist.

Schade, wirklich schade.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

Beaker s.a.

Hallo crystal,
Ohne mir deine DB angesehen zu haben, ist für mich
ZitatGruppierung auf einen Primärschlüssel heißt, es kann keine Änderung
im Vergleich zur Ausgangstabelle geben, da man einen eindeutigen Wert nicht
zusammenfassen kann,
konkret genug.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

crystal

Hallo Ekkehard,

... da wäre es doch schön, den Fehler genau zu zeigen. Vielleicht ist es ja nur ein "Flüchtigkeits-Fehler", weil der Primärschlüssel in meinen Abfragen eigentlich nicht nötig ist.

Das von dir bemühte Zitat ist als solches und isoliert natürlich richtig, aber es fehlt der konkrete Bezug zu meiner Lösung oder ein einfacher Verbesserungs-Vorschlag wie "den Primärschlüssel kann man auch weglassen" oder "den Primärschlüssel muss man herausnehmen, weil...".

Insofern ist es natürlich auch schade, dass du dich zu deiner Aussage entschlossen hast, ohne die DB angeschaut zu haben.

Ist es denn so schwer, meine Lösung konkret zu kritisieren?

Nochmal: es geht hier nicht darum, verklausoliertes Besserwissen (nicht negativ gemeint) zum Besten zu geben, sondern am KONKRETEN Beispiel (was wäre konkreter als eine kleine Beispiel-DB) zu zeigen, wo Fehler liegen.

Könnte ein erfahrener Access-User wie Eberhard denn nicht versuchen, in diesem Sinne konkrete Aussagen zu treffen, um den Thread nach vorne zu bringen? Statt dessen scheint er sich geradezu zu bemühen, nebulöse Aussagen zu formulieren.

Ich glaube, manche Forums-Mitglieder (bei weitem nicht alle, denn es gibt ja viele Beispiele für konstruktive Hilfe) müssten sich mal wieder etwas zurück nehmen und daran denken, dass Fragesteller oft nicht den gleichen Wissensstand haben.

lg
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

ebs17

Zitataber es fehlt der konkrete Bezug zu meiner Lösung oder ein einfacher Verbesserungs-Vorschlag
qryAll oder so ähnlich:
Überflüssige Gruppierung/Aggregierung. Heißt, es wird Aufwand betrieben für NULL Ergebnis. Was ist da unverständlich oder unkonkret?
Kann man weglassen wäre noch untertrieben => muss man weglassen.

Ich lasse es aber. Einzelne Sätze verstehst Du nicht, längere Texte verstehst Du nicht. Anscheinend sprechen wir eine sehr unterschiedliche Sprache, und ich habe keinen Missionierungsanspruch. Genügend Personen verstehen mich auf Anhieb.
Manche wollen eben erst ihre eigenen Erfahrungen sammeln, was in Ordnung ist. Wenn man andere ins gleiche Boot zieht, ist es schon etwas diskutabler. Nur daher meine Einwürfe.
Mit freundlichem Glück Auf!

Eberhard

crystal

Hallo,
mein Konstrukt mit der Gruppierung über den PK, beruhte darauf, dass ich bei anderen Feldern "First" benutze und das scheint nur zu gehen, wenn man gruppiert.
Es funktioniert auch ohne First und Gruppierung, wie ich jetzt herausgefunden habe:

SELECT fs.fsTank AS Tank, fs.fsProdukt AS Produkt, fs.fsDatum AS Datum,
fs.fsMenge AS StandAktuell,
DLookUp("[fsMenge]","qryGetPrevious","[fsTank] = " & [fsTank] & " and [fsProdukt] = " & [fsProdukt] &
" and [fsdatum] < " & Format(CDate(fsdatum),'\#mm\/dd\/yyyy\#' & " ")) AS StandZuvor,
StandAktuell-StandZuvor AS Differenz
FROM fs
ORDER BY fs.fsId DESC;


Ich hatte zunächst viel mit meiner Abfrage experimentiert und so ist das Gruppierungs-Ding entstanden.

<OT>
Mich deshalb jedoch abzukanzeln und zu beschimpfen, ist absolut kein Stil, lieber Eberhard. Auch deine Vermutungen über mein Lesevermögen sind sehr grenzwertig.

Es ist auch keineswegs so, dass andere dich auf Anhieb verstehen, einmal von sehr wenigen Profis abgesehen.  Deine Texte sind sehr oft oberlehrerhaft und arrogant, Fehler zuzugeben scheint dir extrem schwer zu fallen (ach so - du machst ja keine).

Du machst dir nicht einmal die Mühe, deine Beiträge mit einer Begrüßung zu beginnen und mit einem Gruß zu beenden (Netiquette) , einmal abgesehen von deinem Kumpel-Gruß in der Signatur (solltest du übrigens mal ändern, wirkt irgendwie lächerlich).

Mich hat man gelehrt, mich so auszudrücken, das andere mich verstehen. Und wenn mich jemand nicht versteht, meine Aussagen umzuformulieren.

Das scheint dir abzugehen, was ich sehr schade finde, da du doch ein erfahrener Access-Kenner bist. Es geht ja auch anders, wie du im ersten Absatz deines letzten Beitrags andeutungsweise zeigst. Der Rest ist dann allerdings wieder eher für die Tonne.

Schade, dass wir uns immer wieder gegenseitig beschimpfen. Das liegt aber zu einem großen Teil an dir. Ich habe dich oft genug um Sachlichkeit gebeten und darum, Aussagen näher zu erläutern, weil nicht jeder deinen Erfahrungs-Horizont hat. Und oft hast du darauf entweder nicht oder nur arrogant reagiert (ich lasse es, will nicht missionieren, usw.). Dabei scheinst du nicht zu bemerken, dass du dir mit solchen Äußerungen nur selbst schadest.

</OT>

lg
crystal

PS: Lieber Jörg, bitte ändere die Abfrage qryGetAll wie oben angegeben ab.
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...