Abfrageproblematik mit MySQL

Hiho,

Unabhängig davon, dass ich es seltsam finde, eine Personalnr. in der Mitarbeiter Chronik zu finden, anstatt in den Mitarbeiter Stammdaten ;)
Ja, falls du die Personalnr mitliefern willst, reicht es das A-Subselect um dieses Feld zu erweitern.
Nur dran denken, dann auch das Group by um dieses feld zu erweitern

SELECT A.M_ID, A.PersonalNr, A.Gesamt, B.Gefiltert, B.MAXAustritt
FROM (SELECT M_ID, Personalnr, COUNT(*) AS Gesamt
FROM MAChronik GROUP BY M_ID, Personalnr) AS A,

Und schon kannst du das oben mit mac.personalnr ansprechen

Was Performance betrifft, muss ich passen, da ich selten mit MySQL zu tun habe, und auch keinen Query-Analyzer dafür zur Hand habe.
Vielleicht kann dir jeman anderst hier dabei helfen.
 
Hi again,

jo perfekt!!

Hab mal gemessen wie lange es gedauert hat, bis er mir die ausgeschiedenen Mitarbeiter rausgesucht hat.
-> Zeige Datensätze 0 - 499 (694 insgesamt, Die Abfrage dauerte 0.1896 Sekunden.) [M_ID: 1... - 2358...]

Zitat: [Unabhängig davon, dass ich es seltsam finde, eine Personalnr. in der Mitarbeiter Chronik zu finden, anstatt in den Mitarbeiter Stammdaten ;)]

-> Ja das hatten wir auch schon voher so gemacht. Da die PersonalNr aber an einem Mitarbeitervertrag geknüpft ist, und ein Mitarbeiter bei Vertragswechsel (Student Festangestellter Minijobber etc.) eine andere PersonalNr zugewiesen bekommen (daher auch Eintritt/Austritt bei Kündigung und Wiedereinstellung oder Vertragswechsel), musste dies in eine Mitarbeiterchroniktabelle ausgelagert werden, samt Personalnummer. Also kann mann diese Tabelle MAChronik auch als Arbeitsvertragtabelle sehen. -> Auch später für Statistiken:)

Beste Grüße!
 
In dem Fall dran denken: Da nach M_ID und PersonalNr gruppiert wird, kann es passieren, dass du für gegebene M_ID aber dann mehrere Ergebnisse bekommen kannst, da ja eine M_ID mehrere PersonalNr haben kann.
In deinen Beispieldaten würdest du in der neuen Variante für M_ID=77 3 Ergebnisse bekommen (anstatt wie bisher nur 1), weil für MAC_ID 7 bis 9 jedesmal eine andere PersonalNr existiert.
Falls du wirklich nur die ausgeschiedenen Mitarbeiter sehen willst, würde es vielleicht Sinn machen, die letzte (=Höchste?) PersonalNr zu liefern.

In dem Fall müsstest du das A-SubSelect umbauen in (Auf das Max(PersonalNr) achten sowie der ursprüngliche GROUP BY)
SELECT A.M_ID, A.PersonalNr, A.Gesamt, B.Gefiltert, B.MAXAustritt
FROM (SELECT M_ID, MAX(Personalnr) AS PersonalNr, COUNT(*) AS Gesamt
FROM MAChronik GROUP BY M_ID) AS A,
 
Zurück