Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL cho kết quả sai với GROUP BY và ORDER BY

Đây là truy vấn của bạn:

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

Một vấn đề chính với truy vấn của bạn là nó sử dụng một phần mở rộng MySQL cho nhóm group by MySQL đó rõ ràng cảnh báo chống lại. Phần mở rộng là việc sử dụng các cột khác trong select không có trong nhóm group by hoặc trong các hàm tổng hợp. Cảnh báo ( tại đây ) là:

Vì vậy, các giá trị được trả về trong các cột là không xác định .

Đây là một cách khá hiệu quả để có được những gì bạn muốn (với "comission" được viết đúng chính tả trong tiếng Anh):

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. mysql fulltext MATCH, LẠI trả về 0 kết quả

  2. SQL Injection trong Java và MySQL khi sử dụng nhiều truy vấn

  3. Làm cách nào để gỡ lỗi tại sao truy vấn MySQL đơn giản nhất lại trả về false?

  4. Ví dụ LAST_DAY () - MySQL

  5. SQL - Điều kiện WHERE trên SUM ()