Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Resultados errados do MySQL com GROUP BY e ORDER BY


Esta é a sua consulta:
SELECT *
FROM (SELECT *
      FROM user_comission_configuration_history
      ORDER BY on_date DESC
     ) AS ordered_history
WHERE user_id = 408002
GROUP BY comission_id;

Um grande problema com sua consulta é que ela usa uma extensão MySQL para group by que o MySQL explicitamente adverte contra. A extensão é o uso de outras colunas no select que não estão no group by ou em funções de agregação. O aviso (aqui ) é:

Portanto, os valores retornados nas colunas são indeterminados .

Aqui está uma maneira bastante eficiente de obter o que você deseja (com "comission" escrito corretamente em inglês):
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;