SQL Abfrage älteste Datum

thinkkati

Benutzer
Beiträge
5
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
 
Werbung:
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
 
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.
 
AW: SQL Abfrage älteste Datum

Muss mich mal selbst zitieren...

Falls es nicht funktioniert, brauche ich die Tabellenstrukturen (SHOW CREATE TABLE kunde , .. ) sowie ein paar Testdaten (INSERT ... ).

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

Grüße
Thomas
 
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.
 
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?
 
Werbung:
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
 
Zurück
Oben