# TSQL: letzten Datensatz einer Gruppe



## PeterE (2. März 2010)

Hallo Forum,

ich benötige einen Tip zu TSQL. Folgendes Problem:

Select Kundenname, Datum, KZ1, KZ2 
from Kundentabelle 
order by Kundenname, Datum

ERGEBNIS:
Braun, 20091101, A, X
Braun, 20091202, A, B
Schmitz, 20090315, B, C
Schmitz, 20090502, A, F
Schmitz, 20090502, A, X
Schmitz, 20090502, A, Y
.
.
.

Wie muss das SQL-Statement aussehen damit ich nur *einen der jüngsten Einträge * eines Kunden bekomme unabhängig davon womit die Spalten KZ1 und KZ2 gefüllt sind.

SOLLERGEBNIS
Braun, 20091202, A, B
Schmitz, 20090502, A, Y
.
.
.

Wobei, welcher der 3 Datumsgleichen 'Schmitz' - Datensätze aus dem Beispiel im Ergebnis erscheint ist unerheblich, wichtig ist das nur *einer* erscheint. 

Wäre für nen Tip dankbar. 

PeterE


----------



## Mel_One (2. März 2010)

Versuchs mal mit

```
Select TOP(1) Kundennr, Datum, KZ1, KZ2 from Kundentabelle order by Datum DESC
```


----------



## Artorius (2. März 2010)

Moin!
Beispielsweise so (sofern Kundennr den Datensatz eindeutig identifziert):

```
Select a.Kundennr, a.Datum, a.KZ1, a.KZ2 from Kundentabelle a where a.Datum = 
(select max(b.Datum) from Kundentabelle b where a.Kundennr = b.Kundennr)order by Kundennr, Datum
```

Grüße!


----------



## PeterE (2. März 2010)

Mel_One hat gesagt.:


> Versuchs mal mit
> 
> ```
> Select TOP(1) Kundennr, Datum, KZ1, KZ2 from Kundentabelle order by Datum DESC
> ```


Hallo Mel_One, so bekomme ich leider nur das jüngste Datum raus. Ich möchte aber je Kunde einen Datensatz


----------



## PeterE (2. März 2010)

Artorius hat gesagt.:


> Moin!
> Beispielsweise so (sofern Kundennr den Datensatz eindeutig identifziert):
> 
> ```
> ...


Hallo Artorius, die Kundennummer identifiziert den Datensatz nicht eindeutig (in meinem Beispiel 'Braun' und 'Schmitz' - ich weiss blöde Kundennummern) - zu jedem Kunden gibt es mehere Datensätze mit unterschiedlichem Datum und Einträgen in den Spalten KZ1 und KZ2


----------



## Artorius (2. März 2010)

Ah sorry,
war ein bisschen falsch formuliert meinerseits. Nochmal neu gesagt, wenn du nur den neusten Eintrag eines eines Kunden haben möchtest, dann sollte mein Beispiel schon passen..

Grüße!


----------



## PeterE (2. März 2010)

Habe das Beispiel nochmal angepasst. Leider gibt es auch Datensätze mit gleichem Datum je Kunde ist mir vorher nicht aufgefallen. Sorry


----------



## Artorius (2. März 2010)

So, 
was besseres fehlt mir nun auch gerade nicht ein:

```
Select a.Kundennr, a.Datum from Kundentabelle a where a.Datum = 
(select max(b.Datum) from Kundentabelle b where a.Kundennr = b.Kundennr) group by a.Kundennr, a.Datum order by Kundennr, Datum
```

Grüße!


----------



## PeterE (2. März 2010)

Danke erstmal für die schnelle Hilfe. 

Das Beispiel funktioniert solang ich nicht die Spalten KZ1 und KZ2 hinzunehme, dann bekomm ich wieder zu jedem unterschiedlichem Eintrag in KZ1 und KZ2 einen Datensatz (3 x 'Schmitz')  

Gruß


----------



## Thomas Darimont (8. März 2010)

Hallo,

schau mal hier:

```
select a.*
    from Kundentabelle a LEFT JOIN Kundentabelle b 
    ON a.kundenname = b.kundenname AND a.datum < b.datum 
    WHERE b.datum IS NULL;
```

siehe auch:
http://www.tutorials.de/forum/relat...ten-wert-innerhalb-von-gruppe-darstellen.html
für Schmitz gibt es aber keinen eindeutigen neuesten Wert (oder ist das für dich der letzte eingefügte Wert nach der natürlichen Ordnung in der Tabelle?)

Gruß Tom


----------



## PeterE (10. März 2010)

Hallo Tom,

Dank für die Antwort. Dein Beispiel kannte ich schon. Habe es mal umgesetzt, Das Ergebnis

Braun	20091202  	A         	B         
Schmitz	20090502  	A         	F         
Schmitz	20090502  	A         	X         
Schmitz	20090502  	A         	Y 

Es wäre aber wichtig das nur ein Schmitz erscheint, welcher ist egal, die anderen Informationen sind zweitrangig müssen aber trotzdem mitgeführt werden.    

Gruß


----------

