Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL salah hasil dengan GROUP BY dan ORDER BY

Ini pertanyaan Anda:

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

Satu masalah utama dengan kueri Anda adalah ia menggunakan ekstensi MySQL untuk group by bahwa MySQL secara eksplisit memperingatkan terhadap. Ekstensi adalah penggunaan kolom lain di select yang tidak termasuk dalam group by atau dalam fungsi agregasi. Peringatan (di sini ) adalah:

Jadi, nilai yang dikembalikan dalam kolom adalah tak tentu .

Berikut adalah cara yang cukup efisien untuk mendapatkan apa yang Anda inginkan (dengan "komisi" dieja dengan benar dalam bahasa Inggris):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Karakter mana yang sebenarnya mampu menyebabkan injeksi SQL di MySQL?

  2. Catat setiap kueri MySQL ke file dengan mengaktifkan General Log in MAMP

  3. Sintaks SQL DROP DATABASE – Didaftarkan oleh DBMS

  4. Bagaimana cara menyimpan catatan harian dari tabel mysql ke tabel lain?

  5. INSERT INTO dengan SubQuery MySQL