sql - Using LIMIT within GROUP BY to get N results per group? -


निम्नलिखित क्वेरी:

  SELECT year, id, rate h से WHERE वर्ष 2000 के बीच और 2009 और आईडी में (चयन 2 टेबल से छुटकारा) आईडी द्वारा आईडी, वर्ष के आदेश आईडी, दर DESC  

पैदावार:

  वर्ष आईडी दर 2006 p01 8 2003 p01 7.4 2008 p01 6.8 2001 p01 5.9 2007 p01 5.3 2009 p01 4.4 2002 p01 3. 9 2004 p01 3.5 2005 p01 2.1 2000 p01 0.8 2001 p02 12.5 2004 p02 12.4 2002 p02 12.2 2003 p02 10.3 2000 p02 8.7 2006 p02 4.6 2007 p02 3.3 < / Code> 

मैं क्या चाहता हूं केवल प्रत्येक आईडी के लिए शीर्ष 5 परिणाम:

  2006 p01 8 2003 p01 7.4 2008 p01 6.8 2001 p01 5.9 2007 p01 5.3 2001 p02 12.5 2004 p02 12.4 2002 p02 12.2 2003 p02 10.3 2000 p02 8.7  

क्या ऐसा कोई तरीका है जो किसी प्रकार की सीमाओं का उपयोग करके संशोधक की तरह होता है जो ग्रुप बीई में काम करता है?

आप कर सकते हैं आईडी द्वारा समूहीकृत और दर :

  SELECT id, GROUP_CONCAT (वर्ष) द्वारा क्रमबद्ध एक एकल कॉलम में सभी वर्षों तक एकत्रित फ़ंक्शन का उपयोग करें  

परिणाम

  ---------------- ------------------------------------------- | आईडी | GROUPED_YEAR | -------------------------------------------------- --------- | P01 | 2006,2003,2008,2001,2007,2009,2002,2004,2005,2000 | | P02 | 2001,2004,2002,2003,2000,2006,2007 | -------------------------------------------------- ---------  

और फिर आप इसका प्रयोग कर सकते हैं, जो दूसरे एक के अंदर पहला तर्क की स्थिति देता है, उदा।

  SELECT FIND_IN_SET ('2006', '2006,2003,2008,2001,2007,2009,2002,2004,2005,2000'); 1 चयन FIND_IN_SET ('2009', '2006,2003,2008,2001,2007,2009,2002,2004,2005,2000'); 6  

GROUP_CONCAT और FIND_IN_SET के संयोजन का उपयोग करके, और find_in_set द्वारा प्राप्त की गई स्थिति से फ़िल्टरिंग करके, आप इस क्वेरी का उपयोग कर सकते हैं प्रत्येक आयडी के लिए केवल पहले 5 साल की रिटर्न:

  अपना चयन करें। * सेमेस्टर इनर से जुड़ें (SELECT id, GROUP_CONCAT (दर डीईएससी द्वारा वर्ष आदेश) grouped_year yourtable ग्रुप द्वारा आईडी) yourtable पर group_max .id = group_max.id और FIND_IN_SET (वर्ष, समूहीकृत_युअर) yourtable.id के द्वारा 1 और 5 के आदेश के अनुसार, yourtable.year डीईएससी;  

कृपया बेला देखें।

कृपया ध्यान दें कि यदि एक से अधिक पंक्ति में एक ही दर हो सकती है, तो आपको GROUP_CONCAT (अंतर दर ऑर्डर दर दर) का उपयोग करने पर विचार करना चाहिए वर्ष कॉलम के बजाय दर स्तंभ।

GROUP_CONCAT द्वारा लौटा जाने वाली स्ट्रिंग की अधिकतम लंबाई सीमित है, इसलिए यदि आपको हर समूह के लिए कुछ रिकॉर्ड चुनने की आवश्यकता है तो यह अच्छी तरह से काम करता है।


Comments

Popular posts from this blog

oracle - The fastest way to check if some records in a database table? -

php - multilevel menu with multilevel array -

jQuery UI: Datepicker month format -