Theo kinh nghiệm của tôi, cách nhanh nhất là lấy từng hàng mà không có hàng mới hơn trong bảng.
Một ưu điểm khác là cú pháp được sử dụng rất đơn giản và ý nghĩa của truy vấn khá dễ nắm bắt (lấy tất cả các hàng sao cho không có hàng mới hơn tồn tại cho tên người dùng được xem xét).
KHÔNG TỒN TẠI
SELECT username, value
FROM t
WHERE NOT EXISTS (
SELECT *
FROM t AS witness
WHERE witness.username = t.username AND witness.date > t.date
);
SỐ LƯỢNG HÀNG
SELECT username, value
FROM (
SELECT username, value, row_number() OVER (PARTITION BY username ORDER BY date DESC) AS rn
FROM t
) t2
WHERE rn = 1
THAM GIA
SELECT t.username, t.value
FROM t
INNER JOIN (
SELECT username, MAX(date) AS date
FROM t
GROUP BY username
) tm ON t.username = tm.username AND t.date = tm.date;
TRÁI PHIẾU THAM GIA
SELECT username, value
FROM t
LEFT OUTER JOIN t AS w ON t.username = w.username AND t.date < w.date
WHERE w.username IS NULL