Mehrfach Abfrage (MAX) in SQL

Jo_S

Grünschnabel
Hallo,

um Nachfragen vorzubeugen, ich kenne die Suchfunktion und habe auch schon einiges
herausbekommen, doch ich brauche Hilfe.

Ich habe eine Tabelle (MAGRP_HISTORIE) u. a.mit den Einträgen "MANR_F,GUELTIG_AB,h.MONATSPLANTEILNR_F".

In "MANR_F" ist die Mitarbeiternummer
In "GUELTIG_AB" das Datum als Zahl (z.B. 5560 für Heute)
In "MONATSPLANTEILNR_F" die Mitarbeitergruppe ( 1 bis 130)



Nun versuche ich eine Abfrage zu erstellen, die mir alle Mitarbeiter (MANR_F) ausgibt, die aktuell in der ,z.B. Mitarbeitergruppe Nr. 30, sind, also das höchste Datum (GUELTIG_AB) in (MONATSPLANTEILNR_F).

Ich habe dies vollbracht:

select h.MANR_F,MAX(h.GUELTIG_AB),h.MONATSPLANTEILNR_F
from MAGRP_HISTORIE h
Group By h.MANR_F,h.MONATSPLANTEILNR_F
having MAX(h.GUELTIG_AB) <= ? (wird von vb6 als Variable übergeben- aktueller TAG)
and h.MONATSPLANTEILNR_F =? (wird von vb6 als Variable übergeben)

ORDER BY h.MONATSPLANTEILNR_F


Nun bekomme ich natürlich immer nur das größte Datum in der Gewählten Gruppe, aber nicht das größte, das es für den Mitarbeiter gibt.

Da ich eine Auswertung nach (Mitarbeiter)-Gruppen mache (muß), kommt es nun vor, dass ein Mitarbeiter doppelt Geld bekommt, wenn er die Gruppe zwischenzeitlich gewechselt hat.


Für jede Hilfe bin ich dankbar
Jochen
 
Du hast kein DBMS angegeben, also habe ich hier mal eine Variante in T-SQL. So oder so sollte das Prinzip klarwerden. Der Übersichtlichkeit halber habe ich Gueltig_ab als Datum definiert, so werden die Ergebnisse besser lesbar. Funktioniert mit Integer aber genauso



USE TempDB
GO
CREATE TABLE MAGRP_HISTORIE (
MANR_F int ,
GUELTIG_AB datetime,
MONATSPLANTEILNR_F int
)
GO
INSERT INTO MAGRP_HISTORIE VALUES (1, '17 May 2005', 1)
INSERT INTO MAGRP_HISTORIE VALUES (1, '1 May 2005', 2)
INSERT INTO MAGRP_HISTORIE VALUES (2, '15 May 2005', 1)
INSERT INTO MAGRP_HISTORIE VALUES (2, '10 May 2005', 2)
INSERT INTO MAGRP_HISTORIE VALUES (2, '5 May 2005', 3)
INSERT INTO MAGRP_HISTORIE VALUES (3, '2 May 2005', 3)
GO
SELECT * FROM MAGRP_HISTORIE
GO

SELECT *
FROM MAGRP_HISTORIE m join (
SELECT h.MANR_F, MAX (h.Gueltig_ab) maxab
FROM MAGRP_HISTORIE h
WHERE h.Gueltig_ab < GETDATE() -- Hier kommt die Datumsvariable hin
GROUP BY h.MANR_F
) mmax on m.MANR_F = mmax.MANR_F AND m.GUELTIG_AB = mmax.maxab
WHERE m.MONATSPLANTEILNR_F = 1 -- Hier kommt die Gruppenvariable hin
GO
DROP TABLE MAGRP_HISTORIE
GO
 
Hallo,

ich bin begeistert, nach dem ich es etwas angepasst hatte (ich schrieb ja leider das DBMS nicht dazu), funktioniert es wunderbar.

Konnte es auch mehrfach wiederholen, nachdem ich das "drop Tabelle ... " herausgenommen habe (-:

Also vielen Dank !

Jochen
 
Zurück