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

समूह से पहले MySQL आदेश

ORDER BY . का उपयोग करना एक सबक्वेरी में इस समस्या का सबसे अच्छा समाधान नहीं है।

max(post_date) . प्राप्त करने का सबसे अच्छा समाधान लेखक द्वारा अधिकतम तिथि वापस करने के लिए एक सबक्वायरी का उपयोग करना है और फिर post_author दोनों पर अपनी तालिका में शामिल होना है और अधिकतम तिथि।

समाधान होना चाहिए:

SELECT p1.* 
FROM wp_posts p1
INNER JOIN
(
    SELECT max(post_date) MaxPostDate, post_author
    FROM wp_posts
    WHERE post_status='publish'
       AND post_type='post'
    GROUP BY post_author
) p2
  ON p1.post_author = p2.post_author
  AND p1.post_date = p2.MaxPostDate
WHERE p1.post_status='publish'
  AND p1.post_type='post'
order by p1.post_date desc

यदि आपके पास निम्न नमूना डेटा है:

CREATE TABLE wp_posts
    (`id` int, `title` varchar(6), `post_date` datetime, `post_author` varchar(3))
;

INSERT INTO wp_posts
    (`id`, `title`, `post_date`, `post_author`)
VALUES
    (1, 'Title1', '2013-01-01 00:00:00', 'Jim'),
    (2, 'Title2', '2013-02-01 00:00:00', 'Jim')
;

सबक्वेरी अधिकतम तिथि और इसके लेखक को वापस करने जा रही है:

MaxPostDate | Author
2/1/2013    | Jim

फिर चूंकि आप उस तालिका में वापस शामिल हो रहे हैं, दोनों मूल्यों पर आप उस पोस्ट का पूरा विवरण वापस कर देंगे।

देखें SQL Fiddle with Demo

इस डेटा को सटीक रूप से वापस करने के लिए एक सबक्वायरी का उपयोग करने के बारे में मेरी टिप्पणियों पर विस्तार करने के लिए।

MySQL आपको GROUP BY के लिए बाध्य नहीं करता है हर कॉलम जिसे आप SELECT . में शामिल करते हैं सूची। परिणामस्वरूप, यदि आप केवल GROUP BY एक कॉलम लेकिन कुल 10 कॉलम लौटाएं, इस बात की कोई गारंटी नहीं है कि अन्य कॉलम मान जो post_author से संबंधित हैं जिसे वापस कर दिया जाता है। यदि कॉलम GROUP BY . में नहीं है MySQL चुनता है कि कौन सा मान लौटाया जाना चाहिए।

कुल फ़ंक्शन के साथ सबक्वायरी का उपयोग करना गारंटी देगा कि सही लेखक और पोस्ट हर बार वापस आ जाता है।

एक साइड नोट के रूप में, जबकि MySQL आपको ORDER BY . का उपयोग करने की अनुमति देता है एक सबक्वेरी में और आपको GROUP BY . लागू करने की अनुमति देता है SELECT . के हर कॉलम में नहीं सूची इस व्यवहार की SQL सर्वर सहित अन्य डेटाबेस में अनुमति नहीं है।



  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 उच्च उपलब्धता फ्रेमवर्क समझाया - भाग I:परिचय

  2. गलत स्ट्रिंग मान त्रुटियों को कैसे ठीक करें?

  3. MySql पंक्ति को स्तंभ में और स्तंभ को पंक्ति में स्थानांतरित करता है

  4. अपने MySQL टेबल्स पर इंडेक्स बनाने के लिए सर्वोत्तम अभ्यास - रोलिंग इंडेक्स बनाता है

  5. एक ही कीमत पर अमेज़न आरडीएस पर MySQL AWS प्रदर्शन 2X में सुधार कैसे करें