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

MySQL 2 bản ghi hàng đầu cho mỗi nhóm

Ý tưởng của bạn đã gần kề. Tôi nghĩ điều này sẽ hoạt động tốt hơn:

select u.*
from (select user_id, created_datetime, 
             $num := if(@user_id = user_id, @num + 1,
                        if(@user_id := id, 1, 1)
                       ) as row_number
      from logs cross join
           (select @user_id := 0, @num := 0) params
      order by user_id 
     ) u
where row_number <= 2 ;

Dưới đây là những thay đổi:

  • Các biến chỉ được đặt trong một biểu thức. MySQL không đảm bảo thứ tự đánh giá các biểu thức, vì vậy điều này rất quan trọng.
  • Công việc được thực hiện trong một truy vấn con, sau đó được xử lý trong truy vấn bên ngoài.
  • Truy vấn con sử dụng order by , không phải group by .
  • Truy vấn bên ngoài sử dụng where thay vì having (thực ra, trong MySQL having sẽ hoạt động, nhưng where thích hợp hơn).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python chuyển đổi kết quả truy vấn mysql thành json

  2. Khi nào tôi nên sử dụng MySQLi thay vì MySQL?

  3. Cách sử dụng bí danh trong toán tử toán học trong SQL?

  4. Symfony 3 - Một ngoại lệ xảy ra trong trình điều khiển:không thể tìm thấy trình điều khiển

  5. Dự án Java đã hoàn thành, hiện đang tạo tệp jar hoặc .exe (với Cơ sở dữ liệu)