Hallo und guten Abend,
ich habe nochmals eine Anmerkung:
Folgendes funktioniert auch nicht (MAX(id)):
-- Umsatz aus Vorjahr
LEFT JOIN
(
SELECT u.wert_gesamt,u.customer_id FROM turnover u
WHERE
u.id=(SELECT MAX(u2.id) FROM turnover u2
WHERE
u2.customer_id=u.customer_id
AND
u2.jahr='2007')
AND
u.jahr='2007'
) umsatz_vorjahr
ON customers.id = umsatz_vorjahr.customer_id
Aber: Das funktioniert:
-- Kontakte einsammeln
LEFT JOIN
(
SELECT k.name,k.customer_id,k.ansprechpartner_tourenplan FROM customercontacts k
WHERE
k.ansprechpartner_tourenplan='ja'
AND k.id=(SELECT MIN(k2.id) FROM customercontacts k2 WHERE k.ansprechpartner_tourenplan='ja' AND k2.customer_id=k.customer_id)
) kontakte
ON customers.id = kontakte.customer_id
Vom Prinzip her sind beie Abfragen gleich.
Aber: Die erste funktioniert nur solange, solange im SUBSELECT kein Bezug zunm Hauptselect über u2.customer_id=u.customer_id hergestellt wird. Die zweite funktioniert immer - auch mit k2.customer_id=k.customer_id
Darf man im SUBSELECT mit LIMITs arbeiten?
Idee:
-- Umsatz aus Vorjahr
LEFT JOIN
(
SELECT u.wert_gesamt,u.customer_id FROM turnover u
WHERE
u.id=(SELECT u2.id FROM turnover u2
WHERE
u2.customer_id=u.customer_id
AND
u2.jahr='2007' ORDER BY u2.id LIMIT 0,1)
AND
u.jahr='2007'
) umsatz_vorjahr
ON customers.id = umsatz_vorjahr.customer_id
Ja, es funktioniert, aber:
Es geht wieder nur solange, bis die Relation zwischen u.customer_id=u2.customer_id hergestellt wird. Danach läuft das Skript sich tot.
MySQL 4.1.10
Indexe sind auf die jeweiligen Spalten gesetzt.
Hat sonst noch jemand eine Idee?
Bin am verzweifeln....
Viele Grüße
Fabienne