Dari pengalaman saya, cara tercepat adalah mengambil setiap baris yang tidak ada baris baru dalam tabel.
Keuntungan lain adalah bahwa sintaks yang digunakan sangat sederhana, dan bahwa makna kueri agak mudah untuk dipahami (ambil semua baris sehingga tidak ada baris baru untuk nama pengguna yang dipertimbangkan).
TIDAK ADA
SELECT username, value
FROM t
WHERE NOT EXISTS (
SELECT *
FROM t AS witness
WHERE witness.username = t.username AND witness.date > t.date
);
ROW_NUMBER
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
INNER BERGABUNG
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;
LEFT OUTER BERGABUNG
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