MySQL-Tabelle sortiert und Gruppiert ausgeben
CRA
- datenbank
0 Frank (no reg)0 Ilja0 Frank (no reg)0 Ilja0 Frank (no reg)0 Ilja
0 Rouven0 Ilja
Hallo zusammen ...
Es handelt sich um MySQL Version 5.0.
Ich habe eine Tabelle mit mehreren Datensätzen. Es existieren die folgenden Spalten: name(Varchar(255)), ts_create (int(6)) und ein paar weitere.
Es können mehrere Datensätze mit demselben Namen vorkommen, jedoch immer mit unterschiedlichem ts_create-Wert.
Nun möchte ich diese Datensätze so ausgeben, dass von einer Reihe Datensätzen mit gleichem Namen immer nur 1er angezeigt wird und zwar der mit der grössten ts_create. Klar könnte ich dies mit mehreren Abfragen machen, irgend wie muss das doch aber auch mit GROUP BY und ORDER BY gehen.
Danke schon jetzt
Gruss CRA
Hi,
SELECT DISTINCT name, (SELECT Max(ts_create) FROM tabelle WHERE name = t.Name)
FROM tabelle t
Oder so ähnlich ;)
Lies dich doch bitte mal zum Thema "korrelierende Unterabfragen" ein, da solltest du allein hier im Forumsarchiv schon Tonnen von Beiträgen finden.
Wie steht's mit deinen Versuchen?
Ciao, Frank
yo,
SELECT DISTINCT name, (SELECT Max(ts_create) FROM tabelle WHERE name = t.Name)
FROM tabelle t
Lies dich doch bitte mal zum Thema "korrelierende Unterabfragen" ein, da solltest du allein hier im Forumsarchiv schon Tonnen von Beiträgen finden.
die korrelation muss in die selektion (Where klausel) und nicht in die projektion.
Ilja
Moin,
die korrelation muss in die selektion (Where klausel) und nicht in die projektion.
MUSS? Weil es mysql ist?
Frank
yo,
MUSS? Weil es mysql ist?
nein, weil er nur bestimmte datensätze haben will und nicht alle.
Ilja
MUSS? Weil es mysql ist?
nein, weil er nur bestimmte datensätze haben will und nicht alle.
Dazu war eigentlich das distinct am Anfang gedacht :)
Er möchte jeden einzelnen Namen einmal (distinct) und dazu dessen MAX(ts_create). Man kann es sehrwohl auch mit einem SELECT Feld, (SELECT aggregatedValue FROM correlatedQuery) FROM tabelle machen ... nur ob es so am effizientesten ist, das steht in einem anderen Buch. Von MUSS muss aber nicht immer gleich die Rede sein. Viele Wege führen bekanntlich nach Rom. :)
Ciao, Frank
yo,
Dazu war eigentlich das distinct am Anfang gedacht :)
stimmt, das habe ich mal übersehen, es würde auch damit gehen.
nur ob es so am effizientesten ist, das steht in einem anderen Buch. Von MUSS muss aber nicht immer gleich die Rede sein.
muss man immer testen, bevor man das sagen kann, aber ich vermute mal nicht so effektiv.
Ilja
Hello,
Es können mehrere Datensätze mit demselben Namen vorkommen, jedoch immer mit unterschiedlichem ts_create-Wert.
seh ich nen Wald vor lauter Bäumen nicht? Das ist doch das Paradebeispiel für ein GROUP BY, einmal gruppieren und auf die zweite Spalte eine Aggregation.
SELECT name, MAX(ts_create) AS maxcreate
FROM table
GROUP BY name
MfG
Rouven
moin rouven,
seh ich nen Wald vor lauter Bäumen nicht? Das ist doch das Paradebeispiel für ein GROUP BY, einmal gruppieren und auf die zweite Spalte eine Aggregation.
das kommt draufd an, wie man diesen satz interpretiert:
"Nun möchte ich diese Datensätze so ausgeben, dass von einer Reihe Datensätzen mit gleichem Namen immer nur 1er angezeigt wird und zwar der mit der grössten ts_create."
ich gehe davon aus, dass er mehr als nur den namen und dem max ts_create angezeigt haben will und dann wird es schwierig mit der gruppierung.
Ilja