ऐसा करने का एक तरीका यहां दिया गया है, UNION ALL
. का उपयोग करके (देखें SQL Fiddle with Demo
) यह दो समूहों के साथ काम करता है, यदि आपके पास दो से अधिक समूह हैं, तो आपको group
निर्दिष्ट करना होगा प्रत्येक group
. के लिए नंबर और क्वेरी जोड़ें :
(
select *
from mytable
where `group` = 1
order by age desc
LIMIT 2
)
UNION ALL
(
select *
from mytable
where `group` = 2
order by age desc
LIMIT 2
)
ऐसा करने के कई तरीके हैं, अपनी स्थिति के लिए सर्वोत्तम मार्ग निर्धारित करने के लिए यह लेख देखें:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
संपादित करें:
यह आपके लिए भी काम कर सकता है, यह प्रत्येक रिकॉर्ड के लिए एक पंक्ति संख्या उत्पन्न करता है। ऊपर दिए गए लिंक से एक उदाहरण का उपयोग करने से केवल वे रिकॉर्ड वापस आएंगे जिनकी पंक्ति संख्या 2 से कम या उसके बराबर है:
select person, `group`, age
from
(
select person, `group`, age,
(@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number
from test t
CROSS JOIN (select @num:=0, @group:=null) c
order by `Group`, Age desc, person
) as x
where x.row_number <= 2;
देखें डेमो