PostgreSQL . में बहुत ही सरल और तेज़ DISTINCT ON
. के साथ - मानक SQL नहीं इसलिए प्रत्येक RDBMS में उपलब्ध नहीं है।
प्रश्न में इसका उल्लेख नहीं है, लेकिन कोड उदाहरणों से व्युत्पन्न यह वास्तव में प्रत्येक प्राप्तकर्ता के लिए "अंतिम तिथि" वाली पंक्ति की तलाश कर रहा है किसी दिए गए author
के लिए .
SELECT DISTINCT ON (r.recipient) m.*
FROM message m
JOIN recipient r ON r.m_id = m.id
WHERE m.author = 1
ORDER BY r.recipient, m.date DESC, r.m_id -- to break ties
विवरण के साथ-साथ कई SQL मानक विकल्प यहां:
हर ग्रुप बाय ग्रुप में पहली पंक्ति चुनें?
बुनियादी, मानक एसक्यूएल के साथ एक और समाधान। MySQL . सहित हर प्रमुख RDBMS के साथ काम करता है (चूंकि वह टैग जोड़ा गया है):
SELECT m.*
FROM message m
JOIN recipient r ON r.m_id = m.id
WHERE m.author = 1
AND NOT EXISTS (
SELECT 1
FROM message m1
JOIN recipient r1 ON r1.m_id = m1.id
WHERE r1.recipient = r.recipient
AND m1.author = 1
AND m1.date > m.date
)
केवल नवीनतम दिनांक वाली पंक्ति NOT EXISTS
. से गुजरती है विरोधी अर्ध-जुड़ना।