# Group by Sortierung



## ShooterMS (10. August 2005)

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


----------



## TurnMeOn (10. August 2005)

order by ... DESC


oder wat?!


----------



## Nico Graichen (10. August 2005)

ShooterMS hat gesagt.:
			
		

> ...
> Der Wert ID kann mehrmals vorkommen.
> ...



Soweit mir bekannt ist, sollte ein Identifier (ID) eindeutig sein 

zum Thema:
Suchst du sowas?

```
SELECT id, MAX(wert) FROM tmp GROUP BY ID
```


----------



## ShooterMS (10. August 2005)

ID ist nicht der Primary Key. Bis jetzt war leider noch keine Lösung dabei


----------



## Nico Graichen (10. August 2005)

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    

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


----------



## Luzie (10. August 2005)

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


----------



## ShooterMS (10. August 2005)

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.


----------



## Luzie (10. August 2005)

Hi

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


----------

