[MySQL] Kunden mit Austrittsdatum (ohne neues Eintrittsdatum)

phoebe

Grünschnabel
Guten Tag allerseits!

Ich hoffe der Thread-Titel ist nicht allzu verwirrend... aber ich steh grad so komplett auf dem Schlauch, dass ich nicht mal mehr das hinbekomme.

Also.. folgendes Problem. Ich habe eine ziemlich grosse MySQL-Datenbank, aus der ich Kunden auslesen soll. Und zwar alle Kunden, welche gekündigt haben. Pro Abonnement ist dabei jeweils ein Eintritts und ein Austrittsdatum abgespeichert. Ist der Kunde _nicht_ gekündigt, steht im Austrittsdatum der Wert '0000-00-00'.

Nun könnte man auf den ersten Blick meinen, dass jetzt einfach nach allen Kunden zu suchen wäre, welche beim Austrittsdatum nicht '0000-00-00' stehen haben. Wenn ich das mache, erhalte ich aber auch all jene, welche irgendwann mal einen Abowechsel hatten. Denn mit jedem Abowechsel wird das alte Abo beendet und ein neues Eröffnet. Neue Abo-ID, gleiche Kunden-ID.

Was ich jetzt also brauche ist: von jedem Kunden den aktuellsten Eintrag und dann innerhalb dieser Menge nur jene Kunden, welche nicht '0000-00-00' im Austrittsdatum stehen haben.

Ich weiss einfach nicht wie ich den jeweils aktuellsten Kundeneintrag ermitteln soll. Subselects (geht gar nicht in MySQL, oder?)? Irgendwie mit max()? Für temporäre Tabellen fehlen mir vermutlich die Berichtigungen... (ist ein Produktivsystem... kann also schlecht dran rum experimentieren).

Oder ist vielleicht mein ganzer Ansatz falsch und ich muss das anderst eingrenzen?

Meine bisherige Abfrage (wo eben nur der Wert im Austrittsdatum ausgeschlossen ist):

Code:
use gga

select
adr.id as ID,
adr.free_field as OldID,
adr.firma as Firma,
anr.head as Anrede,
adr.nachname as Nachname,
adr.vorname as Vorname,
adr.strasse as Strasse,
plz.plz_ort as Ort,
abo.eintritt as Eintritt,
abo.austritt as Austritt

from
(address AS adr
LEFT JOIN signedabo AS abo
	ON adr.id = abo.cust_id)
LEFT JOIN anrede AS anr ON (anr.id = adr.anrede)
LEFT JOIN plz ON (plz.id = adr.plzort)
LEFT JOIN abos AS prod ON (prod.id = abo.abotyp)

where
adr.mandate_id = 6
AND abo.austritt != '0000-00-00'

order by
abo.austritt;

Ich bin dankbar für jeden Geistesblitz, jede Idee und jeden Lösungsansatz. Komme einfach wirklich grad gar nicht weiter... :(

Herzlichen Dank im voraus und tausend liebe Grüsse

phoebe
 
Hallo,
probier mal bitte auf jedenfall mit max (abo.eintritt), das sollte gehen habe ähnlich probs täglich:
PHP:
use gga

select
adr.id as ID,
adr.free_field as OldID,
adr.firma as Firma,
anr.head as Anrede,
adr.nachname as Nachname,
adr.vorname as Vorname,
adr.strasse as Strasse,
plz.plz_ort as Ort,
max (abo.eintritt) as Last_Eintritt ,
abo.austritt as Austritt

from
(address AS adr
LEFT JOIN signedabo AS abo
	ON adr.id = abo.cust_id)
LEFT JOIN anrede AS anr ON (anr.id = adr.anrede)
LEFT JOIN plz ON (plz.id = adr.plzort)
LEFT JOIN abos AS prod ON (prod.id = abo.abotyp)

where
adr.mandate_id = 6
AND abo.austritt != '0000-00-00'

group by
adr.id,
adr.free_field,
adr.firma,
anr.head,
adr.nachname,
adr.vorname,
adr.strasse,
plz.plz_ort,
abo.austritt


order by
abo.austritt;
 
Zurück