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

Nhóm MySQL theo ID và Ngày giờ mới nhất

Tôi nghĩ rằng với những điều dưới đây, bạn có thể đạt được những gì mình cần, Hoạt động này được gọi là "Tối đa theo nhóm".

Tùy chọn 1

Đây là cách dễ hiểu nhất, một truy vấn con sẽ trả về TID tối đa cho tất cả người dùng vì max được sử dụng cùng với Group By và hơn là chúng tôi thực hiện một truy vấn khác để lấy tất cả dữ liệu cho các ID đó.

 Select TID, TData, TUserID, TViewedAt
 From Test 
 Where TID In(
    Select Max(TID)
    From Test
    Group By TUserID
)

Tùy chọn 2

Hơi phức tạp hơn để hiểu, nhưng rất có thể hiệu quả hơn, Điều này hoạt động trên cơ sở khi t1.TViewedAt là giá trị lớn nhất, không có t2.TViewedAt với giá trị lớn hơn và giá trị hàng t2 sẽ là NULL .

SELECT t1.TID, t1.TData, t1.TUserID, t1.TViewedAt
FROM Test t1
LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAt
WHERE t2.TUserID IS NULL;

Kết quả

TID TData   TUserID   TViewedAt
4   test3   123       2012-10-05 00:00:00.000
5   test2   213       2012-10-03 00:00:00.000


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảng được đánh dấu là bị rơi và cần được sửa chữa

  2. Hiển thị thông báo khi không tìm thấy kết quả nào trong tìm kiếm PHP MySQL

  3. cách triển khai một lệnh sql phức tạp

  4. MySQL - Tại sao các quy tắc COLLATION bị bỏ qua bởi toán tử LIKE đối với ký tự ß trong tiếng Đức

  5. Thứ tự sắp xếp mặc định trong MySQL (ALTER TABLE ... ORDER BY ...;)