Hallo Didi,
ich habe eine tabelle mit folgendem grobem aufbau
- id
- name
- info
- timestamp
ich möchte nun zu jedem namen den letzten eintrag haben, sprich den mit dem jeweils höchsten timestamp.
nicht "where" ist dein statement, sondern "order by" :-).
leider ist das falsch. WHERE ist genau richtig, ORDER BY hilft in diesem Fall überhaupt nicht.
Mit "where" fragst du Datensätze mit einem bestimmten gesetzten Feldwert ab, mit "order by" kannst du Ergebnisse sortieren.
Du sagst es ja selbst: Mit WHERE filtert man Datensätze - und das möchte der OP. Er möchte zu jedem Namen nur den Datensatz mit dem höchsten Timestamp.
Wenn du das ganze jetzt noch mit "limit" einschränkst, kannst du dir immer den letzten (aktuellsten) Datensatz raussuchen lassen.
Nein, das funktioniert nicht. Warum? Ganz einfach:
1. Möglichkeit:
Sortiere zuerst nach Namen, dann nach Timestamp. Du hast nun alle Einträge zu einem bestimmten Namen wunderbar beisammen. Wie willst Du mit LIMIT zu jedem einzelnen Namen genau einen Datensatz erhalten? Es geht einfach nicht.
2. Möglichkeit:
Sortiere erst nach Timestamp, dann nach Namen. Woher kennst Du die Anzahl der verschiedenen Namen? Kannst Du dir sicher sein, dass bei den höchsten Timestamps nicht ein Name doppelt auftaucht? nein, kannst Du nicht. Geht also auch nicht.
3. Möglichkeit:
Du könntest argumentieren: Aber da gibt es doch noch GROUP BY.
Das geht auch nicht, da Du über die Spalte info nicht sinnvoll gruppieren kannst. Da aber die Info aus der Spalte info essentiell ist, geht es nicht.
Wie es geht, habe ich in https://forum.selfhtml.org/?t=124769&m=804136 beschrieben.
Freundliche Grüße
Vinzenz