Sortieren innerhalb einer Gruppierung (SQL Newbie)
Sortieren innerhalb einer Gruppierung (SQL Newbie)
am 01.01.2006 21:49:57 von Anton Lewur
Hallo SQL Gurus,
Ich moechte aus einer Tabelle verschiedene Meldungen gruppieren
und die jeweils letzte Meldung Anzeigen. Kann ich innerhalb der
Gruppierung irgendwie sortieren?
Da ich absoluter Anfaenger bin, bin ich fuer jeden Tipp Dankbar.
Gruss Anton.
mysql Ver 14.7 Distrib 4.1.11, for pc-linux-gnu (i386)
Beispiel Tabelle:
+----+---------------------+------+---------+
| id | timestamp | host | message |
+----+---------------------+------+---------+
| 2 | 2005-12-29 14:35:12 | h10 | message |
| 6 | 2005-12-26 15:00:00 | h31 | asdf |
| 7 | 2005-12-27 15:00:00 | h31 | asdf |
| 8 | 2005-12-28 15:00:00 | h31 | asdf |
| 9 | 2005-12-26 15:00:00 | h32 | qwer |
| 10 | 2005-12-27 15:00:00 | h32 | qwer |
+----+---------------------+------+---------+
Das moechte ich (Die letzte Meldung soll angezeigt werden):
+----+---------------------+------+---------+-----------+
| id | timestamp | host | message | COUNT(id) |
+----+---------------------+------+---------+-----------+
| 2 | 2005-12-29 14:35:12 | h10 | message | 1 |
| 8 | 2005-12-28 15:00:00 | h31 | asdf | 3 |
| 10 | 2005-12-27 15:00:00 | h32 | qwer | 2 |
+----+---------------------+------+---------+-----------+
Das bekomme ich:
+----+---------------------+------+---------+-----------+
| id | timestamp | host | message | COUNT(id) |
+----+---------------------+------+---------+-----------+
| 2 | 2005-12-29 14:35:12 | h10 | message | 1 |
| 6 | 2005-12-26 15:00:00 | h31 | asdf | 3 |
| 9 | 2005-12-26 15:00:00 | h32 | qwer | 2 |
+----+---------------------+------+---------+-----------+
Mein (Beispiel) Code:
SELECT * , COUNT(id)
FROM tb_messages
WHERE `host` = xyz
GROUP BY 'message' , 'host'
ORDER BY `host` ASC ;
Re: Sortieren innerhalb einer Gruppierung (SQL Newbie)
am 02.01.2006 00:08:05 von Kai Ruhnau
Anton Lewur wrote:
> Hallo SQL Gurus,
>
> Ich moechte aus einer Tabelle verschiedene Meldungen gruppieren
> und die jeweils letzte Meldung Anzeigen. Kann ich innerhalb der
> Gruppierung irgendwie sortieren?
[snip: Group-wise Maximum]
> Mein (Beispiel) Code:
>
> SELECT * , COUNT(id)
> FROM tb_messages
> WHERE `host` = xyz
> GROUP BY 'message' , 'host'
> ORDER BY `host` ASC ;
Das Problem ist, dass in den Zeilen, über die du nicht gruppierst,
irgendein Wert aus der Gruppe genommen wird. Diese müssen untereinander
nichteinmal zugehörig sein.
Du suchst:
The Rows Holding the Group-wise Maximum of a Certain Field:
http://dev.mysql.com/doc/refman/5.0/en/example-maximum-colum n-group-row.html
Grüße
Kai
--
This signature is left as an exercise for the reader.
Re: Sortieren innerhalb einer Gruppierung (SQL Newbie)
am 02.01.2006 19:08:26 von Anton Lewur
> Du suchst:
>
> The Rows Holding the Group-wise Maximum of a Certain Field:
>
http://dev.mysql.com/doc/refman/5.0/en/example-maximum-colum n-group-row.html
Ja das funktioniert, ist aber leider extrem langsam, gibt es da nichts
schnelleres?
> Grüße
> Kai
Danke und Gruss Anton
Re: Sortieren innerhalb einer Gruppierung (SQL Newbie)
am 02.01.2006 19:35:50 von Christian Kirsch
Anton Lewur wrote:
>>Du suchst:
>>
>>The Rows Holding the Group-wise Maximum of a Certain Field:
>>
>
> http://dev.mysql.com/doc/refman/5.0/en/example-maximum-colum n-group-row.html
>
> Ja das funktioniert, ist aber leider extrem langsam, gibt es da nichts
> schnelleres?
>
>
Gewöhn Dir bitte an, vernünftig zu zitieren. Wie soll jemand wissen, was
funktioniert und was langsam ist, ohne alle vorhergehenden Postings zu
lesen? Bitte lies dazu http://learn.to/quote und beherzige es.
Das Thema "Meine Query ist langsam" haben wir hier regelmäßig. Du
könntest also Google bemühen, um Lösungsmöglichkeiten zu finden. Die
naheliegendste ist EXPLAIN. Näheres dazu findest Du im Handbuch unter
dev.mysql.com/doc
Re: Sortieren innerhalb einer Gruppierung (SQL Newbie)
am 03.01.2006 18:51:38 von Anton Lewur
Christian Kirsch wrote:
> Anton Lewur wrote:
>>>Du suchst:
>>>
>>>The Rows Holding the Group-wise Maximum of a Certain Field:
>>>
>>
>>
http://dev.mysql.com/doc/refman/5.0/en/example-maximum-colum n-group-row.html
>>
>> Ja das funktioniert, ist aber leider extrem langsam, gibt es da nichts
>> schnelleres?
>>
>>
>
> Gewöhn Dir bitte an, vernünftig zu zitieren. Wie soll jemand wissen, was
> funktioniert und was langsam ist, ohne alle vorhergehenden Postings zu
> lesen? Bitte lies dazu http://learn.to/quote und beherzige es.
Auszug aus http://learn.to/quote:
2.1 Wieviel soll ich zitieren?
...
Im Normalfall reicht es daher völlig aus, genau die Aussage stehen zu
lassen, auf die man sich beziehen möchte. Die Mitlesenden sind entweder
ohnehin darüber im Bilde, worum es in der Diskussion geht, oder in der
Lage, den vorangegangenen Artikel anhand der Bezüge (References) zu finden
und selber komplett zu lesen.
...
???