Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Xoar am Dezember 08, 2020, 11:00:14

Titel: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: Xoar am Dezember 08, 2020, 11:00:14
Hallo alle zusammen,

ich komme gerade nicht weiter, zur Situation.
Ich habe eine Tabelle wo Mitarbeiteruntersuchungen eingetragen werden (tblMitarbeiterUntersuchungen),
abgeschlossene Untersuchungen bleiben in der Tabelle erhalten, neue bekommen einen neuen DS mit aktuellem Datum. Nun möchte ich gerne in meiner Formularebene links nur die neuesten Untersuchungen jeder Untersuchungsart stehen haben und bearbeiten können. Rechts in einem weiteren Formular sollen filterbar alle Untersuchungen im Verlauf dargestellt werden.

Das rechte Formular mit dem Verlauf und dem Filter habe ich ohne Probleme hinbekommen, nur beim Linken wo die Aktuellsten angezeigt werden sollen nicht.

die Tabelle ist gekürzt so aufgebaut:
tblMitarbeiterUntersuchungen
MAID Autowert
MitarbeiterID_F as long
UntersuchungsID_F as long
UntersuchtAm as Date
Bestanden as boolean

Wie baue ich nun ein, dass nach Mitarbeiter gruppiert nur die verschiedenen UntersuchungsID_F´s mit dem neuesten Datum angezeigt werden?

Ich habe schon versucht im Abfragemanager für UntersuchungsID_F statt gruppiert auf Max, oder letzterWert zu stellen, aber er zeigt mir trotzdem mehrere DS zur gleichen UntersuchungsID_F bei einem Mitarbeiter an -.-

Kleines optisches Beispiel wie es sein soll:
MitarbeiterID_F UntersuchungsID_F UntersuchtAm ....
1                      1                       01.01.2020
1                      1                       01.02.2020
1                      1                       01.03.2020
1                      2                       01.01.2020....

Die beiden rot markierten DS sollten demnach nicht dargestellt werden.
 

Könnt ihr mich auf den richtigen Weg bringen?

PS: kann ich in der Abfrage die Werte dann noch ändern, oder ist die gesperrt?

Danke :)
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: PhilS am Dezember 08, 2020, 11:18:15
Zitat von: Xoar am Dezember 08, 2020, 11:00:14Wie baue ich nun ein, dass nach Mitarbeiter gruppiert nur die verschiedenen UntersuchungsID_F´s mit dem neuesten Datum angezeigt werden?

Ich habe schon versucht im Abfragemanager für UntersuchungsID_F statt gruppiert auf Max, oder letzterWert zu stellen, aber er zeigt mir trotzdem mehrere DS zur gleichen UntersuchungsID_F bei einem Mitarbeiter an -.-
[...]
PS: kann ich in der Abfrage die Werte dann noch ändern, oder ist die gesperrt?

LetzerWert ist ein Zufallswert! (https://codekabinett.com/rdumps.php?Lang=1&targetDoc=dfirst-dlast-sortierte-ergebnismenge) - Bitte nicht verwenden.

Bzgl. UntersuchungsID_F´s mit dem neuesten Datum, siehe: Daten des letzten Kind-Datensatzes anzeigen (https://codekabinett.com/rdumps.php?Lang=1&targetDoc=abfrage-1-zu-n-aggregatfunktion-letzter-datensatz) (Zweite Hälfte des Textes)

(Datenbank-)Theoretisch sollte eine solche Abfrage aktualisierbar sein. Da allerdings eine zweite Abfrage mit aggregierten Werten beteiligt ist, könnte Access sich zusammenfantasieren, dass die Abfrage nicht aktualisierbar ist. - Ausprobieren.
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: Xoar am Dezember 08, 2020, 12:03:21
JA super,

das sieht vielversprechend aus, ich werde es mal testen.

Grüße
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: ebs17 am Dezember 08, 2020, 12:31:13
Aktualisierbarkeit:
Zur Besserung der Chancen des Vorschlages könnte man ein DISTINCTROW einsetzen.

Sicher wird die Variante, wenn man die Berechnung zur Reduktion in einen Filter  verschiebt und in der oberen Abfrageebene nur die Tabelle anzeigt.
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: Xoar am März 04, 2021, 17:22:12
Hallo,
ich habe noch ein Problem mit meiner Abfrage.

Und zwar habe ich die im Bild sehende Abfrage: uqryMitarbeiterUntersuchungenFilter,
diese zeigt nur die letzte Untersuchung jeder Kategorie und Mitarbeiter an. Klappt auch

Beziehungen.jpg

Wenn ich jetzt aber in der Gesamtabfrage, wie auf dem Bild zu sehen, Felder von der tblMitarbeiterUntersuchungen dazu packe, werden Datensätze angezeigt, die garnicht existieren dürften.

Explizit geht es um die Felder NaechsteUntersuchungAm und SonderGueltigkeit, sobald diese der Gesamtabfrage hinzugefügt wurden, tauchen die neuen DS auf. Aber warum?

Es ist doch ein Join eingestellt, dass nur Daten aus uqryMitarbeiterUntersuchungenFilter angezeigt werden sollen?!

Hier nochmal die SQL Anweisungen:
SELECT uqryMitarbeiterUntersuchungenFilter.FMitarbeiterID,
uqryMitarbeiterUntersuchungenFilter.Maxvonuntersucht AS untersucht,
tblMitarbeiterUntersuchungen.bestanden,
DateDiff("yyyy",[Geburtsdatum],Date())+(Format(Date(),"mmdd")<Format([Geburtsdatum],"mmdd")) AS [Alter],
tblMitarbeiterUntersuchungen.naechsteUntersuchungAM,
tblMitarbeiterUntersuchungen.SonderGueltigkeit,
tblMitarbeiterUntersuchungen.Brillentraeger,
tblUntersuchungen.UntersuchungName,
uqryMitarbeiterUntersuchungenFilter.FUntersuchungID

FROM tblMitarbeiter RIGHT JOIN (tblUntersuchungen RIGHT JOIN (tblMitarbeiterUntersuchungen RIGHT JOIN uqryMitarbeiterUntersuchungenFilter
ON (tblMitarbeiterUntersuchungen.untersucht = uqryMitarbeiterUntersuchungenFilter.Maxvonuntersucht)
AND (tblMitarbeiterUntersuchungen.FMitarbeiterID = uqryMitarbeiterUntersuchungenFilter.FMitarbeiterID))
ON tblUntersuchungen.UntersuchungID = uqryMitarbeiterUntersuchungenFilter.FUntersuchungID)
ON tblMitarbeiter.MitarbeiterID = uqryMitarbeiterUntersuchungenFilter.FMitarbeiterID

WHERE (((tblUntersuchungen.IstUntersuchung)=True))

GROUP BY uqryMitarbeiterUntersuchungenFilter.FMitarbeiterID,
uqryMitarbeiterUntersuchungenFilter.Maxvonuntersucht,
tblMitarbeiterUntersuchungen.bestanden,
DateDiff("yyyy",[Geburtsdatum],Date())+(Format(Date(),"mmdd")<Format([Geburtsdatum],"mmdd")),
tblMitarbeiterUntersuchungen.naechsteUntersuchungAM,
tblMitarbeiterUntersuchungen.SonderGueltigkeit,
tblMitarbeiterUntersuchungen.Brillentraeger,
tblUntersuchungen.UntersuchungName,
uqryMitarbeiterUntersuchungenFilter.FUntersuchungID;

Ich verstehe leider nicht wieso das passiert.
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: Xoar am März 04, 2021, 19:33:19
Ok habs selbst herausgefunden, ich musste zusätzlich noch die FUntersuchungID verknüpfen und schon gings. :)
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: ebs17 am März 05, 2021, 10:01:49
Wenn die Feldauflistung im GROUP BY-Bereich identisch ist zur Auflistung im SELECT-Teil, würde ich mich nicht zufrieden zurücklehnen.

Gruppieren ist, man mag es nicht glauben, Arbeit und kostet Laufzeit. Bei einer Riesen-Feldliste dann um so höher. Und zweitens: Warum muss man über alles Duplikate beseitigen?
Titel: Re: SQL -> nur die neusten Werte pro Kategorie
Beitrag von: Xoar am März 06, 2021, 12:53:27
Moin,

also verstehe ich das so, dass die Gruppierung in Gänze wegfallen kann, da das Ergebnis ja das gleiche ist (in diesem Fall) und nur Rechenzeit kostet.

Teil zwei habe ich nicht ganz nachvollziehen können.
Duplikate sollten ja garnicht da sein 🧐

Ziel war es (einfach) nur links die zeitlich aktuellsten Untersuchungen anzuzeigen und im rechten Bereich alle als Verlauf. Da dürfen ja nicht irgendwelche Pseudoduplikate angezeigt werden.

Fazit:
Ich schaue ob der Wegfall der Gruppierung das gleiche Endergebnis hervorbringt und freue mich dann, dass es ein ticken performanter ist.