मेरे अनुभव से सबसे तेज़ तरीका प्रत्येक पंक्ति लेना है जिसके लिए तालिका में कोई नई पंक्ति नहीं है।
एक अन्य लाभ यह है कि प्रयुक्त वाक्यविन्यास बहुत सरल है, और यह कि क्वेरी का अर्थ समझ में आसान है (सभी पंक्तियों को ऐसे लें कि उपयोगकर्ता नाम के लिए कोई नई पंक्ति मौजूद नहीं है)।
मौजूद नहीं
SELECT username, value
FROM t
WHERE NOT EXISTS (
SELECT *
FROM t AS witness
WHERE witness.username = t.username AND witness.date > t.date
);
पंक्ति संख्या
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
आंतरिक रूप से जुड़ा
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;
बाईं ओर का बाहरी जोड़
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