Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Falsche MySQL-Ergebnisse mit GROUP BY und ORDER BY

Dies ist Ihre Anfrage:

SELECT *
FROM (SELECT *
      FROM user_comission_configuration_history
      ORDER BY on_date DESC
     ) AS ordered_history
WHERE user_id = 408002
GROUP BY comission_id;

Ein großes Problem mit Ihrer Abfrage besteht darin, dass sie eine MySQL-Erweiterung für group by verwendet dass MySQL explizit warnt davor. Die Erweiterung ist die Verwendung anderer Spalten im select die nicht in group by sind oder in Aggregationsfunktionen. Die Warnung (hier ) ist:

Die in den Spalten zurückgegebenen Werte sind also unbestimmt .

Hier ist ein ziemlich effizienter Weg, um das zu bekommen, was Sie wollen (mit korrekter englischer Schreibweise von „comission“):

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;