TSQL: Größtes Datum einer Gruppierung ermitteln

24/10/2007 - 12:08 von tohasremspam | Report spam
Hallo NG,

ich habe hier ein kleines TSQL-Problem.
Ich möchte in einer einzigen Abfrage das jeweils größte Datum
ermitteln und mir aber nicht das Datum, sondern die Schlüsselfelder
(PK: Primary Key) ausgeben lassen, die auf das Datum verweisen.

Vereinfacht sieht die Sache so aus:
Tabelle t1: Der PK besteht aus: IdPK und LfdNrIdPk

IdPK LfdNrIdPk Datum
1 1 01.02.2007
1 2 03.02.2007
1 3 02.02.2007
2 1 01.02.2007
2 2 02.02.2007


SELECT t1.IdPK, Max(t1.Datum) AS maxdat
FROM t1
GROUP BY t1.IdPK;

Die Abfrage liefert :

IdPK maxdat
1 03.02.2007
2 02.02.2007


Was ich aber brauche, wàre die Ausgabe von

IdPK LfdNrIdPk
1 2
2 2


Wie bekommt man das mit einer Abfrage hin?

IdPK ist hier auch nur vereinfacht dargestellt.
Er setzt sich aus 3 Feldern zusammen. Daher habe ich
auch nach IdPk gruppiert.


Gruss Thomas
 

Lesen sie die antworten

#1 Frank Kalis
24/10/2007 - 12:22 | Warnen spam
"Thomas Hase" wrote:

ich habe hier ein kleines TSQL-Problem.
Ich möchte in einer einzigen Abfrage das jeweils größte Datum
ermitteln und mir aber nicht das Datum, sondern die Schlüsselfelder
(PK: Primary Key) ausgeben lassen, die auf das Datum verweisen.

Vereinfacht sieht die Sache so aus:
Tabelle t1: Der PK besteht aus: IdPK und LfdNrIdPk

IdPK LfdNrIdPk Datum
1 1 01.02.2007
1 2 03.02.2007
1 3 02.02.2007
2 1 01.02.2007
2 2 02.02.2007


SELECT t1.IdPK, Max(t1.Datum) AS maxdat
FROM t1
GROUP BY t1.IdPK;

Die Abfrage liefert :

IdPK maxdat
1 03.02.2007
2 02.02.2007


Was ich aber brauche, wàre die Ausgabe von

IdPK LfdNrIdPk
1 2
2 2




Vereinfacht könnte das funktionieren:

SELECT *
FROM t1
JOIN
(SELECT t1.IdPK, Max(t1.Datum) AS maxdat
FROM t1
GROUP BY t1.IdPK;) x
ON t1.IdPK = x.IdPK
AND t1.Datum = x.maxdat
Frank Kalis
Microsoft SQL Server MVP
Webmaster: http://www.insidesql.de

Ähnliche fragen