Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: hajott am April 25, 2020, 11:42:26

Titel: Anfängerfrage
Beitrag von: hajott am April 25, 2020, 11:42:26
Hallo Leute,

ich war länger nicht mehr in Access unterwegs und habe mangels Routine viel vergessen. Ich habe - vereinfacht - zwei Tabellen:

tbl1_Kunden mit den Textfeldern Referenz (Primary) und Name (Text). Weitere Basisdaten des Kunden sollen hier keine Rolle spielen.

Referenz   Name
KD001       Meier
KD002       Schulze
KD003       Peters

tbl2_Status soll nun die Möglichkeit bieten, nacheinander Statusveränderungen zu erfassen, und zwar mit ÄnderungsID (Autowert), Referenz und Status, also

ÄnderungsID    Referenz   Status
1                      KD001      Aktiv
2                      KD002      Aktiv
3                      KD003      Aktiv
4                      KD002      ruhend
5                      KD001      hyperaktiv
6                      KD002      wieder da

Ihr ahnt vielleicht, was ich möchte: Eine Query mit den Kundendaten und dahinter den letzten Status.

Mir ist auch klar, dass ich von der tbl2 das Referenzfeld gruppieren muss als weiteres Feld die ID mit MAX() nehmen muss. Aber wie bastele ich die Statusbezeichnung dieser letzten ID an die Stammdaten?

Vielen Dank im voraus

hajott
Titel: Re: Anfängerfrage
Beitrag von: PhilS am April 25, 2020, 12:14:05
Schau dir mal meinen Text zur Darstellung von aggregierten Daten (https://codekabinett.com/rdumps.php?Lang=1&targetDoc=abfrage-1-zu-n-aggregatfunktion-letzter-datensatz) an. Insbesondere der zweite Teil sollte zu deinen Anforderungen passen.
Titel: Re: Anfängerfrage
Beitrag von: Beaker s.a. am April 25, 2020, 13:16:35
Und, als PK ist der Datentyp "Text" nicht so gut geeignet, nimm besser Zahl
(LongInteger, -> AutoWert). Die Anzeige von "KDnnnn" kannst du über eine
Abfrage realisieren.
Titel: Re: Anfängerfrage
Beitrag von: DF6GL am April 25, 2020, 16:16:57
Hallo,

und nochmal "und":

Den inkrementellen Autowert als Kriterium für einen zeitlichen Ablauf heranzuziehen, kann zu Fehlergebnissen führen. Ein Datumsfeld ist dafür besser geeignet.

Für die Lösung (zu dieser Aufgabe) muss auch nicht unbedingt gruppiert werden:

SELECT S.Referenz, S.Status
FROM tbl2_Status As S
WHERE  S.ÄnderungsID=(Select Max(ÄnderungsID) From tbl2_Status as M Where M.Referenz = S.Referenz )