sql >> Databáze >  >> RDS >> Mysql

MySQL nesprávné výsledky s GROUP BY a ORDER BY

Toto je váš dotaz:

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

Jedním z hlavních problémů vašeho dotazu je, že používá rozšíření MySQL pro group by že MySQL explicitně varuje před. Rozšíření je použití dalších sloupců v select které nejsou v group by nebo v agregačních funkcích. Varování (zde ) je:

Hodnoty vrácené ve sloupcích jsou tedy neurčité .

Zde je docela účinný způsob, jak získat to, co chcete (se správně napsaným slovem „provize“ v angličtině):

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;


  1. Porovnání cloudových virtuálních strojů se spravovanou cloudovou databází

  2. Zobrazení dat z databáze pomocí základního adaptéru a zobrazení seznamu

  3. Nejednoznačný sloupec v příkazu INNER JOIN

  4. MySQL/Hibernate – Jak odladím sdružené připojení MySQL, které neustále vypadává?