Questa è la tua domanda:
SELECT *
FROM (SELECT *
FROM user_comission_configuration_history
ORDER BY on_date DESC
) AS ordered_history
WHERE user_id = 408002
GROUP BY comission_id;
Uno dei problemi principali con la tua query è che utilizza un'estensione MySQL per group by
che MySQL esplicitamente mette in guardia contro. L'estensione è l'uso di altre colonne nel select
che non sono nel group by
o in funzioni di aggregazione. L'avviso (qui
) è:
Pertanto, i valori restituiti nelle colonne sono indeterminati .
Ecco un modo abbastanza efficiente per ottenere ciò che vuoi (con "commissione" scritto correttamente in inglese):
SELECT *
FROM user_commission_configuration_history cch
WHERE NOT EXISTS (select 1
from user_commission_configuration_history cch2
where cch2.user_id = cch.user_id and
cch2.commission_id = cch.commission_id and
cch2.on_date > cch.on_date
) AND
cch.user_id = 408002;