Hallo Gerry,
Ich kriege aber nicht den aktuellen, neusten Datensatz, sondern irgendeiner der per Zufall da in der GROUP BY ausselektiert wurde :-S (Keine Ahnung wie ich das beeinflussen soll.)
Gar nicht, das kannst Du nicht beeinflussen. Das Ergebnis ist zufällig.
Jedes andere DBMS (Datenbankmanagementsystem) als MySQL, das ich kenne,
gibt Dir sowieso kein Ergebnis, sondern eine Fehlermeldung zurück.
Wie kann ich also, dieses MAXDATE abfragen; Dass somit die Gruppierung GENAU den Datensatz nimmt, wo dieses MAXDATE dabei ist?!
Mit einem korrelierten Subselect.
SELECT MAX(IssueDate) AS maxda, tblCustomer.Id AS CustomerId, Product, Version FROM tblProduct LEFT JOIN tblCustomer ON Fk_CustomerId = tblCustomer.Id WHERE 1 GROUP BY CustomerId, Product, Version
Möchtest Du also das letzte Ausgabedatum je Produkt und Kunde haben?
SELECT -- Nimm
p.IssueDate, -- das Ausgabedatum
c.Id AS CustomerId, -- die KundenID
p.Product, -- das Produkt
p.Version, -- die Version
FROM tblProduct p -- aus der Tabelle Produkte
/*
Wenn Du eh' nach Kunden gruppierst, warum nimmst Du dann einen
LEFT JOIN. Ich würde eher einen INNER JOIN erwarten.
Oder interessiert dich auch die letzte Ausgabe eines Produkts,
zu dem _kein_ Kunde eingetragen wurde?
*/
LEFT JOIN tblCustomer c -- und der Tabelle Kunden
ON p.Fk_CustomerId = c.Id -- die über diese beiden Spalten verknüpft sind
WHERE p.IssueDate = ( -- wobei jeweils nur das
WHERE zeit = (
SELECT MAX(p2.IssueDate) -- das neueste Datum
FROM tblProduct p2
WHERE p.Product = p2.Product -- je Produkt
AND p.Fk_CustomerId = p2.Fk_CustomerId -- und Kunde interessiert.
)
ganz analog zu meinem bereits verlinkten Beispiel im Archiv.
Freundliche Grüße
Vinzenz