Ich habe hier eine Tabelle, in der Messwerte sind:
id | spalte1 | spalte2 | … | datum
id enthält eine Nr der Messstelle, Datum das Datum der Erfassung. Die id ist daher nicht eindeutig, Primärschlüssel ist zusammengesetzt (id,datum).
Ich suche nun für jede ID die Zeile mit dem jeweils neuestem Datum (dieses Datum ist für viele IDs verschieden, mit MAX raussuchen und dann in’s WHERE schreiben geht daher nicht). Geht das direkt in SQL (mySQL) ? Eventuell in einer Abfrage ?
Weder mit WHERE, noch mit GROUP BY … HAVING bin ich weiter gekommen.
Danke für deinen Code. Aber soweit war ich schon, das liefert mir zwar id+passendes Datum, aber nicht die dazugehörigen Werte in den anderen Spalten. Und diese kann ich da ja nicht mit in das SELECT aufnehmen, da ich nach den Werten nicht gruppieren kann.
Damit
SELECT id, Max(datum)
FROM Tabelle1
GROUP BY id;
und mit einer zusätzlichen Abfrage im Programm pro id/Datum Kombination geht es auch, aber das gibt etliche 1000 Queries, die ich irgendwie vermeiden wollte.
Dann würde ich die Abfrage nach dem grössten Datum im Programm
machen.
Ja, werde ich wohl machen müssen, auch wenn das blöde ist, da ich denn wegen der 1000 benötigten Datensätze etliche 10000e abrufen muss.
Wahrscheinlich werde ich da regelmäßig die aktuellen Datensätze in eine 2. Tabelle kopieren und dann mit dieser Tabelle weiterarbeiten.
stimmt! genau deswegen ist im sub-select ein t1.id = t2.id drinnen!!
ich hab mir ein test-tabelle mit mehreren sätzen gemacht (unique-key auf id + datum) und das select funktionert fehlerfrei und bringt mir genau die neuesten datensätze!
(ohne jetzt groß html zu formatieren)
tabelle test:
id spalte1 spalte2 datum
1 a b 01-Jän-04
1 c d 01-Feb-04
2 e f 01-Feb-04
2 g h 01-Mär-04
2 i j 01-Jän-04
3 k l 01-Jän-04
3 m n 01-Feb-04
das select liefert folgendes ergebnis:
id spalte1 spalte2 datum
2 g h 01-Mär-04
1 c d 01-Feb-04
3 m n 01-Feb-04
Tut mir leid, hab nicht daran gedacht nur die eine Zeile zu erwähnen.
Ich weiß, dass das „nur“ sql ist, allerdings wäre ich nicht darauf gekommen (da ich auch keine Erfahrung habe), die tabelle einmal t1 und einmal t2 zu taufen, was ja anscheinend der Schlüssel zum Erfolg war.
Entschuldigt, wenn man euch Experten mit Anfängerfragen belästigt, allerdings werden wir sonst wohl niemals schlauer werden…
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Ich weiß, dass das „nur“ sql ist, allerdings wäre ich nicht
darauf gekommen (da ich auch keine Erfahrung habe), die
tabelle einmal t1 und einmal t2 zu taufen, was ja anscheinend
der Schlüssel zum Erfolg war.
ansonsten gibt’s heftige troubles, wenn … id = id … verglichen wird
Entschuldigt, wenn man euch Experten mit Anfängerfragen
belästigt, allerdings werden wir sonst wohl niemals schlauer
werden…
„mein auto hat da was - was und warum?“
falls es irgendwie arrogant klang: sorry - aber wenn jemand nach dem „warum“ fragt, tippe ich, daß da sql-wissen dahinter liegt und deswegen auch irgendwie ein herumprobieren stattfindet (mach zumindest ich immer so, wenn ich eine lösung bekomme, die sich über 239 tabellen mit 823 sub-selects ziehnt - vielleicht ein bißchen übertrieben
ich wußte einfach nicht, muß ich das „select“ erklären oder das „exists“ oder überhaupt sql …
grüße,
tomh
ps: frag ruhig weiter - jedoch vielleicht etwas gezielter …