select wp_posts.* from wp_posts
where wp_posts.post_status='publish'and wp_posts.post_type='post'
group by wp_posts.post_author
having wp_posts.post_date = MAX(wp_posts.post_date) /* ONLY THE LAST POST FOR EACH AUTHOR */
order by wp_posts.post_date desc
संपादित करें:
कुछ टिप्पणियों के बाद मैंने कुछ अतिरिक्त जानकारी जोड़ने का फैसला किया है।
मैं जिस कंपनी में काम कर रहा हूं वह भी पोस्टग्रेज और विशेष रूप से एसक्यूएल सर्वर का उपयोग करती है। यह डेटाबेस ऐसे प्रश्नों की अनुमति नहीं देते हैं। तो मुझे पता है कि ऐसा करने का एक और तरीका है (मैं नीचे एक समाधान लिखता हूं)। आपको यह भी जानना होगा कि आप क्या करते हैं यदि आप प्रक्षेपण में इलाज किए गए सभी स्तंभों द्वारा समूहित नहीं करते हैं या कुल कार्यों का उपयोग करते हैं। नहीं तो रहने दो!
मैंने उपरोक्त समाधान चुना है, क्योंकि यह एक विशिष्ट प्रश्न है। टॉम एक वर्डप्रेस साइट में प्रत्येक लेखक के लिए हालिया पोस्ट प्राप्त करना चाहता है। मेरे विचार से यह विश्लेषण के लिए नगण्य है यदि कोई लेखक प्रति सेकंड एक से अधिक पोस्ट करता है। वर्डप्रेस को अपने स्पैम-डबल-पोस्ट डिटेक्शन द्वारा भी इसे मना करना चाहिए। मैं व्यक्तिगत अनुभव से जानता हूं कि इस तरह के गंदे समूह को MySQL के साथ प्रदर्शन करने में वास्तव में महत्वपूर्ण लाभ है। लेकिन अगर आप जानते हैं कि आप क्या करते हैं, तो आप इसे कर सकते हैं! मेरे पास ऐप्स में ऐसे गंदे समूह हैं जहां मैं पेशेवर रूप से जवाबदेह हूं। यहाँ मेरे पास कुछ mio पंक्तियों वाली तालिकाएँ हैं जिन्हें 100++ सेकंड के बजाय 5-15s की आवश्यकता है।
कुछ पेशेवरों और विपक्षों के बारे में उपयोगी हो सकता है:http://ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html
SELECT
wp_posts.*
FROM
wp_posts
JOIN
(
SELECT
g.post_author
MAX(g.post_date) AS post_date
FROM wp_posts as g
WHERE
g.post_status='publish'
AND g.post_type='post'
GROUP BY g.post_author
) as t
ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date
ORDER BY wp_posts.post_date
लेकिन अगर यहां एक लेखक के लिए प्रति सेकंड एक पोस्ट अधिक है तो आपको एक पंक्ति से अधिक मिलेगा न कि केवल आखिरी वाला .
अब आप पहिया को फिर से घुमा सकते हैं और उच्चतम Id
. के साथ पोस्ट प्राप्त कर सकते हैं . यहां भी कम से कम इस बात की गारंटी नहीं है कि आपको वास्तव में आखिरी मिल जाएगा।