mysql: max() von mehreren spalten

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql_max_von_mehreren_spalten_131936/page_1 - zur Vollversion wechseln!


kleinerChemiker schrieb am 13.12.2004 um 18:09

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 schrieb am 13.12.2004 um 18:15

hast du's mit HAVING schon probiert?


kleinerChemiker schrieb am 13.12.2004 um 18:17

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


gerhardtt schrieb am 13.12.2004 um 18:24

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


kleinerChemiker schrieb am 13.12.2004 um 18:52

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 schrieb am 13.12.2004 um 18:55

Zitat von kleinerChemiker
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 schrieb am 13.12.2004 um 19:22

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 schrieb am 13.12.2004 um 19:50

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 :bash:




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025