Deneyimlerime göre en hızlı yol, tabloda daha yeni bir satır olmayan her satırı almaktır.
Başka bir avantaj, kullanılan sözdiziminin çok basit olması ve sorgunun anlamının anlaşılması oldukça kolaydır (tüm satırları, dikkate alınan kullanıcı adı için daha yeni bir satır olmayacak şekilde alın).
VAR DEĞİL
SELECT username, value
FROM t
WHERE NOT EXISTS (
SELECT *
FROM t AS witness
WHERE witness.username = t.username AND witness.date > t.date
);
SATIR NUMARASI
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
İÇ BİRLEŞİM
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;
SOL DIŞ KATILMA
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