sql >> Base de Datos >  >> RDS >> Mysql

Resultados incorrectos de MySQL con GROUP BY y ORDER BY

Esta es su 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;

Un problema importante con su consulta es que utiliza una extensión de MySQL para group by que MySQL explícitamente advierte contra. La extensión es el uso de otras columnas en el select que no están en el group by o en funciones de agregación. La advertencia (aquí ) es:

Entonces, los valores devueltos en las columnas son indeterminados .

Aquí hay una forma bastante eficiente de obtener lo que desea (con "comission" escrito correctamente en 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;