আমার অভিজ্ঞতা থেকে দ্রুততম উপায় হ'ল প্রতিটি সারিটি নেওয়া যার জন্য সারণীতে কোনও নতুন সারি নেই।
আরেকটি সুবিধা হ'ল ব্যবহৃত সিনট্যাক্সটি খুব সহজ, এবং ক্যোয়ারির অর্থটি বোঝা বরং এটি সহজ (সমস্ত সারি এমনভাবে গ্রহণ করুন যে ব্যবহারকারীর নাম বিবেচনা করার জন্য কোনও নতুন সারি উপস্থিত নেই)।
বিদ্যমান না
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
ভেতরের যোগ দিতে
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