Group by Sortierung

ShooterMS

Mitglied
Ich habe eine Tabelle mit einer Spalte ID und einem Wert. Der Wert ID kann mehrmals vorkommen.

ID | WERT

abcde | 23
abcde | 25
abcde | 26
fdghfh | 34
fdghfh | 32
fdghfh | 40


Wenn ich ein GROUB BY- Statement angebe wird in der Ausgabe der SELECT-Anweisung
select * from tmp group by ID

immer der erste DB-Satz einer ID genommen. Also Ausgabe wäre

abcde | 23
fdghfh | 34

Nun soll aber nicht der erste sondern der letzte DB-Satz genommen werden.
Also
abcde | 26
fdghfh | 40


Wie kann ich das machen?
ein einfaches ORDER BY WERT ASC am Ende sortiert nur die Ausgabe der GROUP BY Werte.

Danke
 
Was hat denn das Feld WERT fürn Datentyp?

Und was kom bei meinum Query als Ergebnis? Hab ihn zwar nicht getestet, war mir aber relativ sicher, dass er :confused:

PS:
Das ID nicht der PK ist war mir schon klar. Ich meinte damit nur, dass es sehr wiedersprüchlich ist, das Feld ID (Abk. für Identifier) zu nennen und dieses aber nicht eindeutig ist. Da, ein Identifier, wie der Name schon sagt etwas (in dem Fall einen Datensatz eindeutig identifiziert. Und das ist ja bei dir nicht ganz der Fall
 
niggo hat gesagt.:
Was hat denn das Feld WERT fürn Datentyp?
PS:
Das ID nicht der PK ist war mir schon klar. Ich meinte damit nur, dass es sehr wiedersprüchlich ist, das Feld ID (Abk. für Identifier) zu nennen und dieses aber nicht eindeutig ist. Da, ein Identifier, wie der Name schon sagt etwas (in dem Fall einen Datensatz eindeutig identifiziert. Und das ist ja bei dir nicht ganz der Fall

Huhu

dem kann ich nur zustimmen ;)

Kannst Du einen subselect nutzen?
http://www.tutorials.de/forum/showthread.php?p=1026803#post1026803
 
ich hab mir die zwei Feldnamen doch nur eben aus den Fingern gesaugt, da die echten Namen keine Relevanz haben. Natürlich ist eine ID immer unique.

Bei deiner Funktion wird der Max-Wert angezeigt. Es soll aber nicht maximale Wert angezeigt werden, sondern der Feldinhalt des letzten Datensatzes. In diesem Falle ist es zufällig der MaxWert.

OK nochmal:

Felder

ID | Name | Anzahl | Datum

1 | gustav | 3 | 3.10.2000
2 | gustav | 5 | 4.10.2000
3 | gustav | 1 | 5.10.2000
4 | hans | 13 | 1.10.
5 | hans | 1 | 5.10.
6 | hans | 11 | 10.10.

Ich möchte jetzt gruppieren nach Name, also als Queryergebnis 2 Zeilen. gustav und hans.

select * from tmp group by Name

edit: Subselect kann ich nicht benutzen da mysql < 4.1

als Ergebnis kommt dann
gustav | 3 | 3.10.2000
hans | 13 | 1.10.
(der erste Datensatz mit gustav oder hans)

Es soll aber rauskommen:
gustav | 1 | 5.10.2000
hans | 11 | 10.10.
(der letzte Datensatz mit gustav oder hans)

Hoffe das Beispiel war besser.
 
Zuletzt bearbeitet:
Hi

deshalb habe ich den Link gepostet.
Es gibt eine Alternative zum Subselect in mySQL.
Schau Dir das Posting von ManicMarble an. ;)
 
Zurück