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