Koontz: SQL-Statement: nur die aktuellsten Datensätze ausgeben

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?

  1. 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

    1. 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 :-)