आपको इसे प्रति जिले में "रैंक" लागू करके करना होगा, फिर केवल ग्रैब प्रति रैंक =1... जॉइन लोकेशन पर @LastDistrict शून्य पर डिफ़ॉल्ट है, अगर जिला आईडी पर आधारित है। यदि जिला चार आधारित है, तो आप डेटा प्रकार से मिलान करने के बजाय इसे बस ="" में बदल सकते हैं।
क्या हो रहा है यह स्पष्ट करने के लिए। "पुरस्कारों की संख्या" पूर्व प्रश्न प्रति जिले और सदस्य के लिए पूरी क्वेरी करता है, हालांकि कई पुरस्कार मायने रखता है। फिर, जिला और सदस्य पुरस्कार गणना (अवरोही) द्वारा आदेश दिया गया, इस प्रकार प्रति जिले में पहले स्थान पर सर्वोच्च पुरस्कार गणना डाल दी गई।
यह एक और फर्जी उपनाम "SQLVars" में शामिल हो गया है जो @RankSeq और @LastDistrict नामक क्वेरी में इनलाइन चर बनाता है। तो, पहली बार, "DistRankSeq" पहले जिले के लिए 1 बन जाएगा, फिर जिले के मूल्य के साथ "@LastDistrict" को प्रमुख बना देगा। उसी जिले के लिए अगली प्रविष्टि (चूंकि यह उचित क्रम क्रम में होगी) को 2 रैंक दी जाएगी, फिर 3, आदि ... परीक्षण किया जाता है, तो रैंक वापस 1 पर सेट हो जाती है और फिर से शुरू हो जाती है। तो आपके पास एक जिला हो सकता है जिसमें 100 सदस्य हों, दूसरा 5 के साथ, दूसरा 17 के साथ...
तो, आपकी अंतिम क्वेरी में वे सभी अपने-अपने रैंक के साथ हैं... अब, HAVING the final District रैंक =1 लागू करें... ऐसा करने से, आप प्रति जिले में शीर्ष 3 सदस्यों को प्राप्त करने के लिए होने को समायोजित कर सकते हैं (उदाहरण के लिए) )...
select
AwardCounts.District,
AwardCounts.MemberName,
AwardCounts.memberAwards,
@RankSeq := if( @LastDistrict = AwardCounts.District, @RankSeq +1, 1 ) DistRankSeq,
@LastDistrict := AwardCounts.District as ignoreIt
from
( select
a.district,
a.membername,
count(*) as memberAwards
from
Awards a
group by
a.district,
a.membername
order by
a.district,
memberAwards desc ) AwardCounts
JOIN (select @RankSeq := 0, @LastDistrict = 0 ) SQLVars
HAVING
DistRankSeq = 1
प्रति फ़ीडबैक संपादित करें यदि इसका एकत्रीकरण समय ले रहा है, तो मैं निम्नलिखित कार्य करूंगा। जिले के लिए प्रति जिला, नाम और प्रारंभिक रैंक के अलावा कुछ भी नहीं के साथ एक नई तालिका बनाएं। जैसा कि इस तालिका में कोई नया रिकॉर्ड जोड़ा जाता है, ट्रिगर फिर एक को कुल तालिका गणना में जोड़ता है, फिर जांचता है कि वह व्यक्ति अपने जिले में कहां है और अपनी नई रैंक स्थिति को फिर से अपडेट करता है। आप इसे एक कदम आगे ले जा सकते हैं और प्रति जिला तालिका में सिर्फ "टॉप" सदस्य की एक और तालिका है जो व्यक्ति के नाम के साथ प्रति जिला एक है। जब कोई नया व्यक्ति शीर्ष स्थान पर आता है, तो उसका नाम तालिका में डाल दिया जाता है, जो वहां अंतिम था उसे अधिलेखित कर देता है।