Hi,
Ok, ihr habt recht. Eigentlich brauche ich nur val1-3 in die GROUP BY mit aufnehmen. Das Problem ist nur, dass ich dateline nicht mit aufnehme, denn dateline ist ein Timestamp und hier soll eben immer nur die letzte Aktivität angezeigt werden (deshalb der zusätzliche MAX).
oder die letzten 17, wenn diese den selben Timestamp besitzen. Dies beachtest Du nicht.
D.h. ich habe jetzt folgende Query ausprobiert. Auf den ersten Blick funtioniert sie (hoffe ich).
Sie besitzt immer noch den Fehler, dateline zu selektieren, ohne danach zu gruppieren.
D.h. bei gleichen Aktivitäten eines Users (userid, eventid und val1-3 müssen übereinstimme) soll in der Liste immer nur ein Datensatz mit dem Timestamp (dateline) des letzten angezeigt werden.
Das passiert nicht. Statt dessen werden die Datensätze mit dem letzten (also neuesten) Timestamp in dateline angezeigt. Ja, das ist ein Unterschied.
Macht das obige "Ding" nach Eurer Meinung jetzt was ich möchte?
Jede einzigartige Kombination aus userid, eventid, val1, val2 und val3 wird selektiert und es wird der größte Timestamp aus dieser Gruppe ermittelt.
GROUP BY ist nicht dazu geeignet, den neuesten (ältesten, größten, schönsten, dicksten) *Datensatz* zu ermitteln, sondern nur den neuesten (ältesten, ...) *Wert* aus einer Gruppe Datensätzen, die gewisse gleichartige Eigenschaften besitzen. Du weißt weder, welcher Datensatz dazu gehört, noch wie viele es sind. Dies musst Du in einem späteren (äußeren) SELECT ermitteln. Der Umstand, dass hierbei auch mehr als ein Ergebnis rauspurzeln kann, zeigt:
Deine Definition von "letzter Datensatz" ist mangelhaft.
Cheatah
X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes