2012-03-01 10 views
9

पर एक नया रिकॉर्ड चुनें, मैं एक प्रश्न लिख रहा हूं, और this thread में समाधान का उपयोग किया है और इसने कुछ हद तक काम किया है लेकिन मुझे अभी भी कुछ परेशानी है।एसक्यूएल - डुप्लिकेट

मैं रिकॉर्ड्स का एक समूह चुनना चाहता हूं जो कि अधिकांश भाग के लिए अद्वितीय है, लेकिन कुछ ऐसा होता है जो दो बार होते हैं। मैं केवल उस रिकॉर्ड का चयन करने में सक्षम होना चाहता हूं जिसमें नवीनतम तारीख है। के रूप में यह उन रिकॉर्ड है कि डुप्लिकेट की नवीनतम रिकॉर्ड प्राप्त करता है, लेकिन उन रिकॉर्ड डुप्लिकेट की जरूरत नहीं है सब पर प्रकट नहीं होते हैं

SELECT tb1.id,tb1.type,tb1.date 

FROM Table tb1 

WHERE tb1.type = 'A' OR 'B' 
AND tb1.date = (SELECT TOP 1 tb2.date 
       FROM Table tb2 
       WHERE tb2.date = tb1.date 
       ORDER BY tb2.date DESC) 

यह जहाँ तक काम करता है: यह मेरा क्वेरी अब तक है।

किसी भी मदद के लिए धन्यवाद, और मेरी माफ़ी अगर मैंने कुछ सुपर स्पष्ट याद किया है; मैं एसक्यूएल गेम में नया हूं।

+0

क्या आप अद्वितीय पंक्तियों का नमूना डेटा प्रदान कर सकते हैं जिन्हें वापस नहीं किया जा रहा है बनाम डुप्लिकेट जहां सही हैं? – kaj

+0

नोट करें कि आप तिथि पर शामिल होने लगते हैं, न कि किसी अन्य चीज़ से आईडी। क्या यह जानबूझकर है? – kaj

+0

क्या आप अधिक विशिष्ट हो सकते हैं? आपने कहा: "मैं केवल उस रिकॉर्ड का चयन करने में सक्षम होना चाहता हूं जिसमें नवीनतम तारीख है" और बाद में "लेकिन उन रिकॉर्ड्स जिनमें डुप्लीकेट नहीं हैं, बिल्कुल दिखाई नहीं देते हैं" ... मुझे दो अलग-अलग चीज़ों की तरह लगता है। – Diego

उत्तर

17

वहाँ यह करने के लिए कुछ तरीके हैं, एक ही रास्ता ROW_NUMBER इस तरह उपयोग करने के लिए है:

SELECT id, type, date 
FROM 
(
    SELECT tb1.id, tb1.type, tb1.Date, 
     ROW_NUMBER() OVER (PARTITION BY tb1.id ORDER BY tb1.Date DESC) AS RowNo 
    FROM Table tb1 
    WHERE tb1.type IN ('A','B') 
) x 
WHERE x.RowNo = 1 

यह नवीनतम तिथि है कि प्रत्येक विशिष्ट आईडी मूल्य के लिए पंक्ति वापस आ जाएगी।

+0

धन्यवाद AdaTheDev, इसने समस्या हल की और मैं क्वेरी को और अधिक डुप्लिकेट के साथ समाप्त करने में सक्षम हूं! –

+0

छोटे टाइपो: tb2.Date tb1.Date होना चाहिए – Vladimirs

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