2012-02-15 14 views
6

मैं एक मेज है नामित customer_age है कि इस तरह loks का चयन करें एसक्यूएल:कई रिकॉर्ड से केवल हाल के

ID  1 2 3  4  5 6  7  8  9 

NAME JIM JIM JIM NICK NICK NICK Paul Paul Paul          
VALUE 20 13 12 10 20 8  4  24 14 

और मैं प्रत्येक नाम से ही पहले रिकॉर्ड प्रदर्शित करना चाहते हैं। कुछ

ID  1  4  7  

NAME JIM NICK Paul         
VALUE 20 10  4  

अब तक मैं इसे काम करने में सक्षम नहीं हूं। मैं SQL सर्वर 2005 किसी भी मदद की सराहना की है ...

+7

मुझे लगता है कि "पहला रिकॉर्ड" सबसे कम आईडी वाला है? –

उत्तर

13

एक subselect का उपयोग कर प्रत्येक नाम के लिए न्यूनतम आईडी मिल जाए, और आईडी की है कि सेट का उपयोग मुख्य तालिका के रिकॉर्ड को खींचने के लिए करने के लिए प्रयास करें:

SELECT ID, Name, Value 
FROM customer_age 
WHERE ID IN 
(
    SELECT MIN(ID) AS ID 
    FROM customer_age 
    GROUP BY Name 
) 
1

पहले रिकॉर्ड मान लिया जाये कि का उपयोग उच्चतम आईडी, आप orderby आईडी और टॉप n उतरते साथ आपकी क्वेरी कोशिश कर सकते हैं मतलब है।

1

बस cross apply का उपयोग कर प्रत्येक नाम के लिए पहले रिकॉर्ड का चयन करें:

SELECT 
ca.ID, ca.NAME, ca.VALUE 
FROM customer_age c 
CROSS APPLY (SELECT TOP 1 ID, NAME, VALUE 
     FROM customer_age ca 
     WHERE ca.NAME = c.NAME ORDER BY ID) ca 
ORDER BY ca.ID 
+0

यह बार-बार परिणाम देता है, ग्राहक_ज में 3 पंक्तियां लागू होने से 1 पंक्ति के साथ जुड़ती हैं। – Umair

2

विंडो फ़ंक्शंस का उपयोग करने के बारे में कैसे ??

SELECT Id, Name, Value 
FROM (
    SELECT Id, Name, Value, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id ASC) AS rowNum 
    FROM customer_age 
) AS sub 
WHERE rowNum = 1 
संबंधित मुद्दे