Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Welcher Kunde hat die letzte Bestellung aufgegeben?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von OtenMoten, 4 Oktober 2017.

  1. OtenMoten

    OtenMoten Benutzer

    Hallo liebe Community,

    ich arbeite derzeit die Übungsaufgaben in einem Buch durch.
    Momentan am Abschnitt 'Join'.

    Die aktuelle Frage, welche mit seit einigen Stunden verzweifeln lässt lautet:
    "Welcher Kunde hat die letzte Bestellung aufgegeben?"

    Angegeben werden soll: kunden_nr, name und bestell_nr

    Die Relationen sind Folgende:

    Imgur: The most awesome images on the Internet

    Mein bisheriger Code erlaubt es mir bei allen Varainten maximal 2 der 3 geforderten Attribute darzustellen.

    Könnt ihr mir weiterhelfen?

    Liebe Grüße

     
  2. akretschmer

    akretschmer Datenbank-Guru

    was genau hast denn bisher versucht?
     
  3. OtenMoten

    OtenMoten Benutzer

    Code:
    
    SELECT b.kunden_nr, b.bestell_nr, k.letzte_bestellung
    FROM (SELECT MAX(letzte_bestellung) AS letzte_bestellung FROM kunde) AS k INNER JOIN bestellung AS b ON b.bestelldatum = k.letzte_bestellung
    
    SELECT MAX(letzte_bestellung)
    FROM (SELECT kunden_nr, name, letzte_bestellung FROM kunde) as k INNER JOIN bestellung ON bestellung.bestelldatum = k.letzte_bestellung;
    
    SELECT k.kunden_nr, b.bestelldatum, k.name
    FROM (SELECT MAX(bestelldatum) AS bestelldatum FROM bestellung) AS b INNER JOIN kunde AS k ON k.letzte_bestellung = b.bestelldatum;
    
    SELECT MAX(letzte_bestellung)
    FROM (SELECT bestell_nr, kunden_nr FROM bestellung) AS b INNER JOIN kunde AS k ON k.kunden_nr = b.kunden_nr;
    
    SELECT b.kunden_nr, b.bestell_nr, k.name
    FROM (SELECT kunden_nr, bestell_nr FROM bestellung) AS b INNER JOIN kunde AS k ON k.kunden_nr = b.kunden_nr;
    
    
     
  4. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT k.kunden_nr,k.name,b.max(bestell_nr) AS bestell_nr,max(b.bestelldatum) AS bestelldatum
    FROM kunde k
    INNER JOIN bestellung b
    ON k.kunden_nr = b.kunden_nr
    GROUP BY k.kunden_nr,k.name
    Wobei ich hier annehme das ein höheres Bestelldatum auch eine höhere Bestell_Nummer mit sich bringt was natürlich nicht so sein muss dann müsste man es anders machen. Auch könnte es dann meherere Bestellungen am selben Tag geben, dann ist die Frage ob mehrere ausgegeben werden sollen.
     
  5. OtenMoten

    OtenMoten Benutzer

    Hallo ukulele,

    vielen Dank für deine Anwort.
    Leider ist das Ergebnis nicht das Gewünschte.

    Code:
    101    Stein, Peter    151    2012-04-28 00:00:00.000
    103    Randers, Nis    154    2012-05-15 00:00:00.000
    105    Stuff, Werner    153    2012-05-12 00:00:00.000
    

    Eventuell so:
    Code:
    SELECT TOP 1 k.kunden_nr, k.name, max(b.bestell_nr) AS bestell_nr, max(b.bestelldatum) AS bestelldatum
    FROM kunde k INNER JOIN bestellung b ON k.kunden_nr = b.kunden_nr
    GROUP BY k.kunden_nr, k.name
    ORDER BY bestelldatum DESC;
    
    103    Randers, Nis    154    2012-05-15 00:00:00.000
    
    Mich würde jedoch interessieren ob man dieses Ergebnis auch ohne TOP erzielen könnte.
     
  6. ukulele

    ukulele Datenbank-Guru

    Also willst du nur einen Datensatz im Ergebnis haben und nicht pro Kunden die neueste Bestellung?
    Code:
    SELECT k.kunden_nr,k.name,b.bestell_nr,b.bestelldatum
    FROM kunde k
    INNER JOIN bestellung b
    ON k.kunden_nr = b.kunden_nr
    WHERE b.bestelldatum = ( SELECT max(bestelldatum) FROM bestellung )
     
    OtenMoten gefällt das.
  7. OtenMoten

    OtenMoten Benutzer

    Genau! :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden