Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

ग्रुप बाय से पहले MySQL ऑर्डर

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 . के साथ पोस्ट प्राप्त कर सकते हैं . यहां भी कम से कम इस बात की गारंटी नहीं है कि आपको वास्तव में आखिरी मिल जाएगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:@variable बनाम चर। क्या फर्क पड़ता है?

  2. मेरा MySQL डेटाबेस दूषित है... अब मैं क्या करूँ?

  3. MySQL में एक विशिष्ट कॉलम के बाद कई कॉलम जोड़ना

  4. MySQL JDBC 08001 डेटाबेस कनेक्शन त्रुटि को कैसे ठीक करें

  5. डेटाबेस में टिप्पणियों और पसंदों को लागू करना