मुझे लगता है कि नीचे के साथ आप जो चाहते हैं उसे प्राप्त कर सकते हैं, इन कार्यों को "समूह-वार अधिकतम" कहा जाता है।
विकल्प 1
यह समझने में सबसे आसान है, एक सबक्वेरी अधिकतम TID
लौटाएगी max
. से सभी उपयोगकर्ताओं के लिए Group By
. के साथ प्रयोग किया जाता है और हम उन आईडी के लिए सभी डेटा प्राप्त करने के लिए एक अन्य क्वेरी करते हैं।
Select TID, TData, TUserID, TViewedAt
From Test
Where TID In(
Select Max(TID)
From Test
Group By TUserID
)
विकल्प 2
समझने में थोड़ा अधिक जटिल है, लेकिन संभवतः अधिक कुशल है, यह इस आधार पर काम करता है कि जब t1.TViewedAt
अपने अधिकतम मूल्य पर है, कोई t2.TViewedAt
. नहीं है अधिक मान के साथ और t2 पंक्तियों के मान NULL
. होंगे ।
SELECT t1.TID, t1.TData, t1.TUserID, t1.TViewedAt
FROM Test t1
LEFT JOIN Test t2 ON t1.TUserID = t2.TUserID AND t1.TViewedAt < t2.TViewedAt
WHERE t2.TUserID IS NULL;
परिणाम
TID TData TUserID TViewedAt
4 test3 123 2012-10-05 00:00:00.000
5 test2 213 2012-10-03 00:00:00.000