2011-11-07 15 views
6

अनदेखी तो मैं इस तरह एक मेज है:एसक्यूएल: एक कॉलम के विशिष्ट चयन, जबकि अन्य स्तंभों

--------- 
id, keyid 
--------- 
1, 3 
1, 5 
1, 6 
2, 1 
2, 1 
2, 3 
4, 1 

I want the output of the query to be 
1,3 
2,1 
4,1 

तो मैं चयन विशिष्ट का उपयोग करें (आईडी, Keyid) तालिका से यह आईडी की जोड़ी पर अलग लागू होता है , keyid और सिर्फ आईडी ही नहीं।

उत्तर

13
select id, min(keyid) from tbl group by id 
+2

यह जाने का रास्ता है। आम तौर पर इस जगह पर अलग-अलग आवेदन करने की बजाय कम से कम सोचने के तरीके को समझना बहुत बेहतर होता है। – stefan

1

आप प्रत्येक ईद के लिए Keyid का न्यूनतम मूल्य चाहते हैं, तो user194076 के जवाब निश्चित रूप से काम करेंगे।

आप प्रत्येक ईद के लिए Keyid के पहले होने वाली मूल्य चाहते हैं, आप इस्तेमाल कर सकते हैं:


WITH CTE AS (
    SELECT Id, KeyId, ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RN 
    FROM tbl 
) 

SELECT Id, KeyId FROM CTE WHERE RN = 1 

मैं परीक्षण किया है दोनों का उपयोग कर STATISTICS IO और STATISTICS TIME और वे प्रदर्शन के मामले में एक ही प्रतीत होते हैं, इसलिए वास्तव में आपकी सटीक जरूरतों पर निर्भर करता है।

संबंधित मुद्दे