Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL donne de mauvais résultats avec GROUP BY et ORDER BY

Voici votre requête :

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 problème majeur avec votre requête est qu'elle utilise une extension MySQL pour group by que MySQL explicitement met en garde contre. L'extension est l'utilisation d'autres colonnes dans le select qui ne sont pas dans le group by ou dans des fonctions d'agrégation. L'avertissement (ici ) est :

Ainsi, les valeurs renvoyées dans les colonnes sont indéterminées .

Voici un moyen assez efficace d'obtenir ce que vous voulez (avec "commission" orthographié correctement en anglais) :

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;