MySQL Forums
Forum List  »  German

Re: GREATEST / MAX von berechneten Spalten
Posted by: Mark Knochen
Date: April 16, 2012 06:13AM

Hallo Thomas,

ich steig noch nicht ganz dahinter, was die Abfrage macht - vor allem nicht, warum inner halb der Query einen Bezug zu MAX(L) oder MAX(M) oder MAX(N) gibt ...

Die Berechnung der Zahlen für value oder score ist ja soweit klar, aber das gewollte Ergebnis "muss" doch eigentlich 2x Werte für die Spalten

L,M,N

liefern, da ja nicht die gleichen Zeilen den höchsten "value" oder den höchsten "score" liefern.

Besteht evtl. die Möglichkeit, die Werte für "value" und "score" zuerst berechnen zu lassen und dann per seperatem SELECT die Zeile auswählen die aus den Spalten L,M,N zu diesem Ergebnis kommt?

Also ungefähr so: (die Syntax wird falsch sein)



SELECT results.resultDate, 

MAX(
   (results.L * 1734.90 * 0.03225807)+(results.M * 33.50 * 0.03225807)+(results.N * 8370.00 * 0.01000000)
) AS value, 


(SELECT results.L from results WHERE (results.L * 1734.90 * 0.03225807)+(results.M * 33.50 * 0.03225807)+(results.N * 8370.00 * 0.01000000) = value) AS LV,

(SELECT results.M from results WHERE (results.L * 1734.90 * 0.03225807)+(results.M * 33.50 * 0.03225807)+(results.N * 8370.00 * 0.01000000) = value) AS MV,

(SELECT results.N from results WHERE (results.L * 1734.90 * 0.03225807)+(results.M * 33.50 * 0.03225807)+(results.N * 8370.00 * 0.01000000) = value) AS NV,

MAX(
    ((results.L * 1734.90 * 0.03225807) * results.factor) / 31 + 
    ((results.M * 33.50 * 0.03225807) * results.factor) / 31 + 
    ((results.N * 8370.00 * 0.01000000) * results.factor) / 31
) AS score, 

(SELECT results.L from results WHERE ( ((results.L * 1734.90 * 0.03225807) * results.factor) / 31 + 
    ((results.M * 33.50 * 0.03225807) * results.factor) / 31 + 
    ((results.N * 8370.00 * 0.01000000) * results.factor) / 31 ) = score) AS LS,

(SELECT results.M from results WHERE ( ((results.L * 1734.90 * 0.03225807) * results.factor) / 31 + 
    ((results.M * 33.50 * 0.03225807) * results.factor) / 31 + 
    ((results.N * 8370.00 * 0.01000000) * results.factor) / 31 ) = score) AS MS,

(SELECT results.N from results WHERE ( ((results.L * 1734.90 * 0.03225807) * results.factor) / 31 + 
    ((results.M * 33.50 * 0.03225807) * results.factor) / 31 + 
    ((results.N * 8370.00 * 0.01000000) * results.factor) / 31 ) = score) AS NS

FROM results 
WHERE resultDate <= '2011-12-15' AND resultDate > ('2011-12-15'- INTERVAL 3 DAY) 
GROUP BY id_company,resultDate ORDER BY value DESC



Bis dahin

Mark

Options: ReplyQuote




Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.