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

MySQL - Kiểm soát hàng nào được trả về bởi một nhóm bởi

Nó được gọi là chọn cột tối đa theo nhóm khôn ngoan. Dưới đây là một số cách tiếp cận khác nhau cho mysql.

Đây là cách tôi sẽ làm điều đó:

SELECT *
FROM (SELECT id, max(version_id) as version_id FROM table GROUP BY id) t1
INNER JOIN table t2 on t2.id=t1.id and t1.version_id=t2.version_id

Điều này sẽ tương đối hiệu quả, mặc dù mysql sẽ tạo một bảng tạm thời trong bộ nhớ cho truy vấn con. Tôi giả sử bạn đã có một chỉ mục trên (id, version_id) cho bảng này.

Sự thiếu sót trong SQL khiến bạn ít nhiều phải sử dụng truy vấn con cho loại sự cố này ( bán tham gia là một ví dụ khác).

Các truy vấn con không được tối ưu hóa tốt trong mysql nhưng các truy vấn con không liên quan không quá tệ miễn là chúng không quá lớn đến mức chúng sẽ được ghi vào đĩa thay vì bộ nhớ. Cho rằng trong truy vấn này chỉ có hai int, truy vấn con có thể dài hàng triệu hàng trước khi điều đó xảy ra nhưng truy vấn con select * trong truy vấn đầu tiên của bạn có thể gặp phải sự cố này sớm hơn nhiều.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về mối quan hệ nhiều-nhiều

  2. Làm thế nào để nhận được sự khác biệt trong năm từ hai ngày khác nhau?

  3. Bắt đầu ngày đầu tuần trong MySql bằng cách sử dụng Week No

  4. PostgreSQL so với MySQL

  5. Ví dụ về UTC_TIME - MySQL