collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 69
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 1
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 14038
  • stats Beiträge insgesamt: 67221
  • stats Themen insgesamt: 9067
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Abfragen so korrekt?  (Gelesen 829 mal)

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Abfragen so korrekt?
« am: Februar 15, 2018, 14:37:12 »
Hallo,
ich habe mir ein paar Abfragen zusammen gebastelt, weiß aber nicht ob die so 100% korrekt sind.
Könnt ihr das evtl. mal überprüfen?

Ziel der Abfragen soll folgendes sein:
In einer Datenbank werden geplante und durchgeführte Reparaturen/Wartungen eingetragen.
Bei einer Reparatur/Wartung wird das Datum, der Kilometerstand und die Art der Reparatur/Wartung (über ein Kombinationsfeld auswählbar) eingetragen.
Es gibt es ein Ufo in dem Fahrzeugspezifische Intervalle eingetragen werden können, z.B. TÜV alle 2 Jahe, Wartung alle 50.000km etc.
Jetzt soll es eine Übersicht geben, wann die nächsten Reparaturen/Wartungen fällig sind. Sprich es muss geschaut werden, wann war die Letzte Reparatur/Wartung die zu einem Intervall passt und dann einfach den Intervall dazu addieren.
Ich habe das Beziehungsfenster als Bilder im Anhang.

Hier mal der SQL Syntax:
Abfrage 1 „qryLetzteWartung“:
Soll darstellen wann die letzte Reparatur/Wartung durchgeführt wurde, die zu einem DS aus dem Intervall passt.
SELECT R.FahrzeugeID_F,
                     Max(R.RepDatum) AS MaxvonRepDatum,
                     R.ArtDerReparatur_F,
                     Max(R.Kilometerstand) AS MaxvonKilometerstand,
                     I.Einheit, I.Wartungsintervall
FROM tblReparaturen AS R INNER JOIN qryFzgWartungsIntervalleMitEinheit AS I ON (R.FahrzeugeID_F = I.FahrzeugID_F) AND (R.ArtDerReparatur_F = I.ArtDerReparaturID_F)
WHERE R.GeplantOderDurchgefuehrt=True
GROUP BY R.FahrzeugeID_F,
                R.ArtDerReparatur_F,
                I.Einheit,
                I.Wartungsintervall;

Abfrage 2 „NaechsteWartung:
Soll berechnen wann die nächste Wartung/Reparatur fällig ist, und entweder die Kilometer addieren, oder den Zeitintervall
SELECT qryLetzteWartung.MaxvonRepDatum,
                     qryLetzteWartung.FahrzeugeID_F,
                     IIf([qryLetzteWartung].[Einheit]="Jahre",DateAdd("yyyy",[Wartungsintervall],[MaxvonRepdatum])) AS NaechstesDatum,
                     IIf([qryLetzteWartung].[Einheit]="KM",[MaxvonKilometerstand]+[Wartungsintervall]) AS NaechsterKilometerstand,     
                     qryLetzteWartung.ArtDerReparatur_F,
                     F.OPTA,
                     F.Kennzeichen,
                     ArtR.NameDerReparatur
FROM (qryLetzteWartungDatum AS qryLetzteWartung INNER JOIN tblFahrzeuge AS F ON qryLetzteWartung.FahrzeugeID_F = F.FahrzeugeID)
         INNER JOIN tblArtDerReparatur AS ArtR ON qryLetzteWartung.ArtDerReparatur_F = ArtR.ArtDerReparaturID
ORDER BY qryLetzteWartung.ArtDerReparatur_F;

Nach den ersten Tests klappt das soweit alles, aber irgendwie hab ich da noch ein komisches Gefühl bei, ob das auch alles so richtig ist.
PS: Es sollen nur DURCHGEFÜHRTE Reparaturen/Wartungen berücksichtigt werden, aber das ist ja im WHERE Teil der ersten Abfrage.
Außerdem sollen nur die Werte zur Intervallberechnung berücksichtigt werden, die passen.
Beispiel:
Wartung durchgeführt:     01.01.2018 – 1000km
Zahnriemen gewechselt: 18.01.2018 – 1500km
Dann soll der Intervallwert für Wartung benutzt werden, in dem Fall 50.000km und nicht der von Zahnriemen gewechselt. Das hab ich hoffentlich mit der Abfrage1 „qryLetztWartung“ geschafft.
Es müssen also 1000km + 50.000km gerechnet werden.

Hoffe das ist irgendwie verständlich.

 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 357
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfragen so korrekt?
« Antwort #1 am: Februar 16, 2018, 09:27:29 »
[...]
WHERE R.GeplantOderDurchgefuehrt=True
[...]
PS: Es sollen nur DURCHGEFÜHRTE Reparaturen/Wartungen berücksichtigt werden, aber das ist ja im WHERE Teil der ersten Abfrage.
Dies habe ich einige Male lesen müssen, um zu verstehen, wie du das (vermutlich) meinst.
Bei jedem Lesen hatte ich da einen deutlichen WTF-Moment!
GeplantOderDurchgefuehrt=TrueWas denn nun?! - Das ist ein Musterbeispiel für die extrem ungünstige Benennung eines Feldes.
So wäre es doch viel klarer:
Durchgefuehrt=TrueNoch besser würde ich es finden, ein DurchgefuehrtAm-Datum zu speichern. Korrespondierend dazu ein GeplantAm-Datum, anstelle des scheinbar mehrdeutigen RepDatums. Durchgefuehrt=Ja/Nein ergibt sich dann aus dem entsprechenden Datum.

Zitat
Außerdem sollen nur die Werte zur Intervallberechnung berücksichtigt werden, die passen.
Hier kann ich dir nicht mehr folgen. Technisch ist das wohl in dem
qryLetzteWartung.ArtDerReparatur_F = ArtR.ArtDerReparaturID implementiert. Aber die (fachliche) Logik dahinter ist für mich nicht nachvollziehbar.
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Re: Abfragen so korrekt?
« Antwort #2 am: Februar 16, 2018, 10:08:13 »
Hallo PhilS,

Ja ich geb dir vollkommen recht, die Benennung ist sehr unvorteilhaft. Aufjedenfall hast du es richtig interpretiert, nach den Wtf Momenten ;)

Zum zweiten Punkt,
Es gibt x beliebige Reparaturen und Wartungen die in tblReparaturen gespeichert werden.
Einige davon sind in einer extra Tabelle hinterlegt und mit einem Wartungsintervall berücksichtigt.

Jetzt soll der Intervall nur auf die Reparatur, oder Wartung angerechnet werden, die in dieser zweiten Tabelle auch erfasst sind, und nicht automatisch auf die neuste aus TblReparaturen, da hier ja auch Reparaturen  erfasst werden, die nicht relevant für die Intervalle sind.

Wie kann man das leicht erklären, mhhh

 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 912
Re: Abfragen so korrekt?
« Antwort #3 am: Februar 16, 2018, 10:21:00 »
Zitat
ich habe mir ein paar Abfragen zusammen gebastelt, weiß aber nicht ob die so 100% korrekt sind
Ob diese ohne Syntaxfehler durchlaufen, kannst Du alleine und schneller prüfen => Ausführen. Ob diese die gewünschten richtigen Ergebnisse an Hand der vorliegenden Daten bringen, kannst Du derzeit nur selber testen.
Bei den anderen hier könnte es sein, dass deren Zauberstab nicht lang genug ist.

Ansonsten: Ich persönlich tue mich schwer, Abfragen zu beurteilen, die selber unbekannte Abfragen enthalten, gerade bei solchen von Autoren, die "basteln". Zudem bräuchte ich die Kenntnis des Beziehungsbildes, wenn mehrere Tabellen verknüpft werden, da ich durchaus geneigt wäre, die Reihenfolge von Verknüpfen und Gruppieren zu tauschen. Davor mache ich mir wegen konkreter Logik keine Gedanken.
Das Letztgenannte hat aber etwas mit direkter und performanter Ausführung der Abfragen zu tun und damit nur im weit entfernten Sinne von 100% Korrektnes.

Der eine sagt, wenn etwas deutlich vom Optimum abweicht, kann man das Fehler nennen. Der andere sagt, wenn etwas funktioniert, kann es kein Fehler sein.
Mit freundlichem Glück Auf!

Eberhard
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 357
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfragen so korrekt?
« Antwort #4 am: Februar 16, 2018, 10:28:00 »
Es gibt x beliebige Reparaturen und Wartungen die in tblReparaturen gespeichert werden.
Einige davon sind in einer extra Tabelle hinterlegt und mit einem Wartungsintervall berücksichtigt.
OK, Ich denke damit ist es verständlich. Diese Anforderungen sollte durch den INNER JOIN aus meiner Sicht korrekt erfüllt sein.

Wenn deine Abfrage qryLetzteWartung nur dem Zweck dienen soll, das nächste Wartungsdatum zu ermitteln, könnte man dort bereits die Datenmenge über den o.g. Join reduzieren und evtl. beide Abfragen in einer zusammenfassen.

Wenn qryLetzteWartung auch für sich alleine genutzt wird, ist der Aufbau IMO korrekt, so wie er ist.
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline Xoar

  • Access-Profi
  • **
  • Beiträge: 401
Re: Abfragen so korrekt?
« Antwort #5 am: Februar 16, 2018, 12:51:21 »
Hallo PhilS
.
qryLetzteWartung wird nur zur Ermittlung  des nächsten Wartungstermin gebraucht, also wie du sagt könnte man die als Unterabfrage einbinden.

Welchen Vorteil bringt das? Hat man dann einfach alles nur übersichtlicher in einer Abfrage, oder ist das auch performanter?

Hallo Eberhard
Ich mache mal ein Bild vom kompletten Beziehungsfenster am Sonntag. Evtl gibt es aus der Sicht ja auch noch Verbesserungen.

Grüße



 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 357
    • Tipps zu Access, VBA, SQL und Co.
Re: Abfragen so korrekt?
« Antwort #6 am: Februar 16, 2018, 13:57:35 »
Welchen Vorteil bringt das? Hat man dann einfach alles nur übersichtlicher in einer Abfrage, oder ist das auch performanter?
Wenn du nicht benötige Daten (ArtDerReparatur) vor der Gruppierung aus der Ergebnismenge ausfilterst, ist das wahrscheinlich schon performanter. - Ob der Unterschied effektiv spürbar ist, ist eine andere Frage.



Neues Access 2019 Feature angekündigt: Modern Charts