SQL-Statement: nur die aktuellsten Datensätze ausgeben
Koontz
- datenbank
0 Matty
Hi,
ich habe eine relativ einfache Frage zu SQL. Angenommen ich habe folgende Datensätze in meiner DB:
Name Vorname GbDatum Anzahl
Donald Duck 10.11.1980 10
Donald Duck 08.07.1987 45
Mickey Mouse 12.05.1967 76
Mickey Mouse 07.09.1988 55
Wenn ein Vor- und ein Nachname doppelt in der DB sind, möchte ich diesen nur einmal ausgeben und zwar immer den Datensatz mit dem aktuelleren Geburtsdatum. Also hier müssten die Datensätze
Donald Duck 08.07.1987 45
Mickey Mouse 07.09.1988 55
ausgegeben werden. Wie ist das per SQL am einfachsten zu realisieren?
ausgegeben werden. Wie ist das per SQL am einfachsten zu realisieren?
Also vermutlich mit einem
select DISTINCT name,vorname,gbdatum,anzahl
from disney
order by gbdatum desc
limit 1
wäre halt gut wenn gbdatum ein timestamp wäre ;)
Die "anzahl" steht fest in der DB als feld, oder wird die im SQL ermittelt über eine COUNT?
Gruß
Martin
Hallo Matty,
Also vermutlich mit einem
select DISTINCT name,vorname,gbdatum,anzahl
from disney
order by gbdatum desc
limit 1
nein. Natürlich nicht. Die Abfrage produziert genau einen Datensatz, Du weißt noch nicht einmal ob dieser doppelt ist. Immerhin es ist das neuere Geburtsdatum bei Mehrfachvorkommen. :-)
Es gibt dafür eine Standardlösung: [korrelierte Unterabfragen](/archiv/2006/7/t133015/#m861544).
> wäre halt gut wenn gbdatum ein timestamp wäre ;)
Nein. Ein Geburtsdatum sollte vom Datentyp DATE oder DATETIME - aber nicht
vom Typ TIMESTAMP sein. Die Besonderheiten eines Timestamps werden nicht
benötigt, die Wertemenge von Timestamps ist heutzutage meist völlig
unzureichend. Der genaue Datentyp ist natürlich auch davon abhängig, was das
Datenbankmanagementsystem überhaupt bietet.
Freundliche Grüße
Vinzenz, dessen Geburtsdatum nicht als Timestamp erfasst werden kann :-)