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