यह आसान होगा। आपको max()
की आवश्यकता नहीं है न ही DISTINCT
इसके लिए:
SELECT *
FROM profile_visits
WHERE social_user_id = 21
AND created_at > (now() - interval '2 months')
AND visitor_id <> 21 -- ??
ORDER BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT 6;
मुझे संदेह है कि आपका प्रश्न अधूरा है। यदि आप चाहते हैं:
6 नवीनतम विज़िटर अपने नवीनतम पेज विज़िट के साथ
तब आपको एक सबक्वेरी चाहिए। आप इस क्रम को एक क्वेरी स्तर में प्राप्त नहीं कर सकते, न ही DISTINCT ON
. के साथ , न ही विंडो फ़ंक्शंस के साथ:
SELECT *
FROM (
SELECT DISTINCT ON (visitor_id) *
FROM profile_visits
WHERE social_user_id = 21
AND created_at > (now() - interval '2 months')
AND visitor_id <> 21 -- ??
ORDER BY visitor_id, created_at DESC NULLS LAST, id DESC NULLS LAST
) sub
ORDER BY created_at DESC NULLS LAST, id DESC NULLS LAST
LIMIT 6;
सबक्वेरी sub
प्रति उपयोगकर्ता नवीनतम विज़िट प्राप्त करता है (लेकिन दो महीने से अधिक पुराना नहीं है और एक निश्चित विज़िटर के लिए नहीं21
. ORDER BY
DISTINCT ON
. के समान प्रमुख कॉलम होने चाहिए ।
फिर 6 नवीनतम विज़िटर प्राप्त करने के लिए आपको बाहरी क्वेरी की आवश्यकता होगी।
घटनाओं के क्रम पर विचार करें:
क्यों NULLS LAST
? सुनिश्चित करने के लिए, आपने तालिका परिभाषा प्रदान नहीं की है।