1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL Abfrage älteste Datum

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von thinkkati, 9 November 2010.

  1. thinkkati

    thinkkati Benutzer

    Hallo Liebe SQL Freaks,

    ich habe eine sql Abfrage in welcher ich nach Kunden abfrage, welche seit z.B. 6 Monaten nicht besucht wurden. Jetzt werden mir diese Kunden ausgegeben, aber mit komplett allen Kontakten älter diesem Zeitraum.
    Ich Möchte jedoch nur den letzten (aktuellsten), damit ich sehe, ok der letzte Besuch war am z.B. 07.01.2010.

    Muss irgendwie mit MAX wohl gehen, aber ich bekomme es nicht hin.
    Ich wäre Euch so dankbar wenn mir jemand helfen könnte. Anbei meine Abfrage:

    SQL:
    SELECT kunde.stamm_nr, kunde.name1, kunde.name2, kunde.strasse, kunde.plz, kunde.ort, termin.datumvon
    FROM DBA.kunde left join dba.termin on kunde.Sdaten_nr = termin.Sbesitzer_nr
    where termin.datumvon < months(now(*) , -6) ORDER BY kunde.stamm_nr, termin.datumvon

    Vielen Dank,
    Kati
     
  2. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage älteste Datum

    Probiert mal dies (ich hoffe es ist kein Tippfehler drin):

    Code:
    SELECT kunde.stamm_nr, kunde.name1, kunde.name2, kunde.strasse, kunde.plz, kunde.ort, termin.datumvon
      FROM dba.kunde 
      JOIN dba.termin   
        ON kunde.Sdaten_nr = termin.Sbesitzer_nr  
      JOIN (SELECT kunde.stamm_nr, MAX(termin.datumvon) AS max_datum
              FROM dba.kunde 
              JOIN dba.termin 
                ON kunde.Sdaten_nr = termin.Sbesitzer_nr
              where termin.datumvon < months(now(*) , -6) 
             GROUP BY kunde.stamm_nr
           ) max1
        ON max1.stamm_nr = kunde.stamm_nr
       AND max1.max_datum = termin.datumvon
    ORDER BY kunde.stamm_nr, termin.datumvon  
    
    Falls es nicht funktioniert, brauche ich die Tabellenstrukturen (SHOW CREATE TABLE kunde , .. ) sowie ein paar Testdaten (INSERT ... ).

    Grüße
    Thomas
     
  3. thinkkati

    thinkkati Benutzer

    AW: SQL Abfrage älteste Datum

    Irgendwie funktioniert das nicht:
    Ich bekomme immer die Meldung:
    Abgeleitete Tabelle 'max1' hat keinen Namen für die Spalte 2.

    An was liegt das?

    Wäre dankbar für eine Antwort.
     
  4. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage älteste Datum

    Muss mich mal selbst zitieren...

    Was für eine Datenbank verwendest Du. Sieht nicht nach MySQL aus.

    Grüße
    Thomas
     
  5. thinkkati

    thinkkati Benutzer

    AW: SQL Abfrage älteste Datum

    Ist eine Sybase Datenbank:

    Daten zu Verfügung stellen ist schwierig, da Kundendaten.

    Was passiert bei diesem Abschnitt von Deinem SQL:

    max1
    ON max1.stamm_nr = kunde.stamm_nr
    AND max1.max_datum = termin.datumvon

    Woher kommt auf einmal das max1?
    Muss dies nicht vorher definiert werden?

    Vielen Dank für die Hilfe.
     
  6. thinkkati

    thinkkati Benutzer

    AW: SQL Abfrage älteste Datum

    @thomas_W:

    Kannst Du auf meine letzte Frage vielleicht noch antworten, wäre super.

    Was passiert bei diesem Abschnitt von Deinem SQL:

    max1
    ON max1.stamm_nr = kunde.stamm_nr
    AND max1.max_datum = termin.datumvon


    Fehlt hier vor max1 nicht noch was?
    Woher kommt dieses max1. Muss das nicht vorher z.B. definiert werden?
     
  7. thomas_w

    thomas_w Datenbank-Guru

    AW: SQL Abfrage älteste Datum

    Mit Sybase kenne ich mich nicht aus, aber ich denke schon, dass Sybase auch so einen JOIN hin bekommt. Vermutlich hängt es nur an Kleinigkeiten.

    Code:
    SELECT kunde.stamm_nr, kunde.name1, kunde.name2, kunde.strasse, kunde.plz, kunde.ort, termin.datumvon
      FROM dba.kunde 
      JOIN dba.termin   
        ON kunde.Sdaten_nr = termin.Sbesitzer_nr  
      JOIN (SELECT kunde.stamm_nr, MAX(termin.datumvon) AS max_datum
              FROM dba.kunde 
              JOIN dba.termin 
                ON kunde.Sdaten_nr = termin.Sbesitzer_nr
              where termin.datumvon < months(now(*) , -6) 
             GROUP BY kunde.stamm_nr
             
           ) max1        <====  Tabellenalias "max1" für den SUB-Select in der Klammer
    
        ON max1.stamm_nr = kunde.stamm_nr   <=== der "max1" Alias wird hier für den JOIN benötigt
       AND max1.max_datum = termin.datumvon
    ORDER BY kunde.stamm_nr, termin.datumvon;
    
    Keine Ahnung, aber vielleicht hilft es den Tabellenalias zusätzlich mit AS zu definieren...

    Code:
    SELECT kunde.stamm_nr, kunde.name1, kunde.name2, kunde.strasse, kunde.plz, kunde.ort, termin.datumvon
      FROM dba.kunde 
      JOIN dba.termin   
        ON kunde.Sdaten_nr = termin.Sbesitzer_nr  
      JOIN (SELECT kunde.stamm_nr, MAX(termin.datumvon) AS max_datum
              FROM dba.kunde 
              JOIN dba.termin 
                ON kunde.Sdaten_nr = termin.Sbesitzer_nr
              where termin.datumvon < months(now(*) , -6) 
             GROUP BY kunde.stamm_nr
    [B]       ) AS max1  [/B]
        ON max1.stamm_nr = kunde.stamm_nr  
       AND max1.max_datum = termin.datumvon
    ORDER BY kunde.stamm_nr, termin.datumvon;
    
    Grüße
    Thomas
     
Die Seite wird geladen...

Diese Seite empfehlen