Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL risultati errati con GROUP BY e ORDER BY

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;