Hallo Fabienne,
SELECT u.erstellt_am,u.wert_gesamt,u.customer_id FROM turnover u
WHERE u.erstellt_am=(SELECT MAX(u2.erstellt_am) FROM turnover u2 WHERE u2.customer_id=u.customer_id)
Ergibt ein scheibar endlos laufendes Skript.....Liegt das evtl daran, dass in dem Subselect (SELECT MAX(u2.erstellt_am)....) mehrer Datensätze gefunden werden könnten?
nein, das sollte kein Problem darstellen. Das ist eine ganz normales korreliertes Subselect, das sich im Vergleich zu einer LIMIT-Klausel gerade dadurch auszeichnet, dass es _keine_ Werte unterschlägt :-)
Eigentlich sollte diese Abfrage mir doch nur einen einzigen Wert zurückliefern und zwar den maximalen Datumswert.
Oder liege ich das falsch?
wenn beim letzten Datumswert mehr als ein Umsatz vorliegt, dann kann es auch mehr als einen Wert zurückliefern. In Deinem Fall möchtest Du definitiv nur einen Wert haben, also musst Du auch Kriterien haben, die Dir diesen Wert exakt zurückliefern. Gibt es mehrere Umsätze am gleichen Tag, dann reicht der Tag nicht aus. Gibt es mehrere Umsätze in der gleichen Sekunde, dann reicht DATETIME in MySQL nicht aus :-)
Korrelierte Subselects können zeitaufwendig sein, insbesondere wenn das Ergebnis in einem Join genutzt wird - und kein Index genutzt werden kann.
Für diesen Fall solltest Du Dir überlegen, ob Du nicht mit
a) temporären Tabellen bzw. zwei Views oder
b) einer Archivtabelle
besser fährst.
Es wäre nett zu wissen, welche MySQL-Version im Einsatz ist. Views, Trigger und weitere feine Sachen stehen erst ab MySQL 5.0.x zur Verfügung.
Freundliche Grüße
Vinzenz