आप DELETE
कर सकते हैं एक सीटीई से:
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1
ROW_NUMBER()
फ़ंक्शन प्रत्येक पंक्ति को एक संख्या निर्दिष्ट करता है। PARTITION BY
उस समूह में प्रत्येक आइटम के लिए नंबरिंग ओवर शुरू करने के लिए उपयोग किया जाता है, इस मामले में uniqueid
का प्रत्येक मान 1 से नंबर देना शुरू करेंगे और वहां से ऊपर जाएंगे। ORDER BY
निर्धारित करता है कि संख्याएं किस क्रम में आती हैं। चूंकि प्रत्येक uniqueid
1 से शुरू होकर क्रमांकित हो जाता है, ROW_NUMBER()
. के साथ कोई भी रिकॉर्ड 1 से अधिक में एक डुप्लीकेट uniqueid
है
कैसे ROW_NUMBER()
. को समझने के लिए फ़ंक्शन काम करता है, बस इसे आज़माएं:
SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid ORDER BY col2)'RowRank'
FROM Table
ORDER BY uniqueid
आप ROW_NUMBER()
. के तर्क को समायोजित कर सकते हैं यह समायोजित करने के लिए कार्य करता है कि आप कौन सा रिकॉर्ड रखेंगे या हटाएंगे।
उदाहरण के लिए, शायद आप इसे कई चरणों में करना चाहते हैं, पहले एक ही अंतिम नाम लेकिन अलग-अलग प्रथम नामों वाले रिकॉर्ड हटाना, आप PARTITION BY
में अंतिम नाम जोड़ सकते हैं :
WITH cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY uniqueid, col3 ORDER BY col2)'RowRank'
FROM Table)
DELETE FROM cte
WHERE RowRank > 1