mysql: max() von mehreren spalten
kleinerChemiker 13.12.2004 - 18:09 4240 7
kleinerChemiker
Here to stay
|
ich habe mehrere spalten, a, b, c, usw. und eine spalte für die zeit. nun würde ich gerne von jeder spalte den max()-wert mit zugehörigem zeit-wert abfragen. ist das in einem query möglich? oder muß ich für jede spalte eine eigene abfrage machen?
beim schreiben ist mir jetzt eine idee gekömmen, könnte sie funzen? SELECT a, b, c, zeit FROM tabelle WHERE max(a) OR max(b) OR max(c) ORDER BY a, b, c
tia
MIK
|
DKCH
Administrator ...
|
hast du's mit HAVING schon probiert?
|
kleinerChemiker
Here to stay
|
having ist ja nix anderes als where, nur daß es nicht optimiert wird. und erst ganz am schluß einzusetzen.
edit: die idee funzt nicht. kommt folgende fehlermeldung:
Falsche Verwendung der GROUP-Funktion
Bearbeitet von kleinerChemiker am 13.12.2004, 18:23
|
gerhardtt
Big d00d
|
dh. du möchest alle zeilen haben die einen(oder auch mehrere) maxwert(e) beherbergen?
@having: having ohne group by wird nicht funktionieren... having ist zwar wie eine where bedingung aber nur auf zuvor gruppierte elemente.
solltest du eine subselectdb haben (neueste mysql sollten das packen) dann:
select a,b,c from table where a= (select max(a) from table) or b=(select max(b) from table)....
grüsse
Bearbeitet von gerhardtt am 13.12.2004, 18:51
|
kleinerChemiker
Here to stay
|
ich möchte den max-wert jeder einzelnen spalte (nicht zeile) haben und den jeweils zugehörigen timestamp (ist in einer weiteren spalte gespeichert)
|
rettich
Legendwaffle, waffle!
|
oder muß ich für jede spalte eine eigene abfrage machen? naja. du kannst mit einem union alle ergebnisse zu einem set zusammen, dann hast halt eine neue tabelle mit pro gelesener spalte eine zeile mit drei spalten sieht dann so aus "spalte" - "maxwert" - "zeit" a - 25 - 25.12 b - 17 - 17.08 c - 18 - 12.03 usw (query dazu wäre ca: select "a" as "spalte", max(f_a) as maxwert, f_time as "zeit" from table UNION select "b" as "spalte", max(f_b) as maxwert, f_time as "zeit" from table ...) aber ob das sinn macht? wie stellst dir denn das ergebnis vor? wie soll das ausschauen, so dass es dir was bringt?
|
kleinerChemiker
Here to stay
|
naja, macht wohl nicht wirklich sinn. wollte versuchen querys zu sparen um das ganze eine spur schneller und resourcenfreundlicher zu machen.
hätte dann halt ne zeile für jeden maxwert gerne gehabt. aber egal, mach ich halt eigene querys.
thx
|
kleinerChemiker
Here to stay
|
hrmpf neues problem. mein query sieht nun so aus: SELECT max(clients) AS clients, zeit FROM sstatus ORDER BY zeit DESC LIMIT 1 allerdings spuckt mysql dabei folgenden fehler aus: Das Vermischen von GROUP Spalten (MIN(),MAX(),COUNT()...) mit Nicht-GROUP Spalten ist nicht erlaubt, sofern keine GROUP BY Klausel vorhanden ist. ein einfügen von 'GROUP BY zeit' läßt das ganze funktionieren, aber nicht mit dem gewünschten ziel. nun erhalte ich nicht den maximalwert aller spalten sondern scheinbar den letzten eintrag (= der mit dem höchsten timestamp) MIK edit: man bin ich blöd. hab viel zu kompliziert gedacht. ein einfaches 'SELECT clients, zeit FROM sstatus ORDER BY clients DESC, zeit DESC LIMIT 1' tuts auch
Bearbeitet von kleinerChemiker am 13.12.2004, 19:53
|