ডকুমেন্টেশন বলে:
DISTINCT ON (অভিব্যক্তি [, ...]) প্রতিটি সারিগুলির প্রথম সারিতে রাখে যেখানে প্রদত্ত প্রকাশগুলি সমান হিসাবে মূল্যায়ন করে। [...] নোট করুন যে কাঙ্ক্ষিত সারিটি প্রথমে উপস্থিত রয়েছে তা নিশ্চিত করতে অর্ডার বাই ব্যবহার না করা হলে প্রতিটি সেটের "প্রথম সারি" অপ্রত্যাশিত। [...] অভিব্যক্তি (গুলি) -এর DISTINCT অবশ্যই বাম দিকের অর্ডার বাই এক্সপ্রেশন (গুলি) এর সাথে মিলে যাবে।
অফিসিয়াল ডকুমেন্টেশন
সুতরাং আপনাকে address_id
আদেশ অনুসারে যুক্ত করতে হবে।
বিকল্পভাবে, আপনি যদি পুরো সারিটি সন্ধান করছেন যা প্রতিটির জন্য সর্বাধিক কেনা পণ্য রয়েছে address_id
এবং এর ফলাফল অনুসারে সাজানো হয়েছে purchased_at
তবে আপনি গ্রুপ প্রতি সমস্যাটি সর্বাধিক এন সমাধান করার চেষ্টা করছেন যা নিম্নলিখিত পদ্ধতির মাধ্যমে সমাধান করা যেতে পারে:
বেশিরভাগ ডিবিএমএস-এ কাজ করা উচিত এমন সাধারণ সমাধান:
SELECT t1.* FROM purchases t1
JOIN (
SELECT address_id, max(purchased_at) max_purchased_at
FROM purchases
WHERE product_id = 1
GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC
@ এইচকেএফ এর উত্তরের উপর ভিত্তি করে আরও একটি পোস্টগ্র্যাস এসকিউএল-ভিত্তিক সমাধান:
SELECT * FROM (
SELECT DISTINCT ON (address_id) *
FROM purchases
WHERE product_id = 1
ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_at DESC
এখানে সমস্যাটি স্পষ্ট, প্রসারিত এবং সমাধান করা হয়েছে: কিছু কলাম দ্বারা সাজানো সারি নির্বাচন করা হয়েছে এবং অন্যটিতে আলাদা