2005 और नए संस्करण के अनुसार SQL सर्वर में, आप ROW_NUMBER
के साथ CTE (कॉमन टेबल एक्सप्रेशन) का उपयोग कर सकते हैं डुप्लिकेट को खत्म करने का कार्य:
;WITH LastPerUser AS
(
SELECT
ID, UserID, ClassID, SchoolID, Created,
ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
FROM dbo.YourTable
)
SELECT
ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1
यह सीटीई आपके डेटा को UserID
. द्वारा "विभाजित" करता है , और प्रत्येक विभाजन के लिए, ROW_NUMBER
1 से शुरू होकर और DESC बनाया
. द्वारा आदेशित, अनुक्रमिक संख्याओं को कार्य करता है - इसलिए नवीनतम पंक्ति को RowNum =1
. मिलता है (प्रत्येक UserID
. के लिए ) जिसे मैं इसके बाद के SELECT स्टेटमेंट में CTE से चुनता हूं।
उसी सीटीई का उपयोग करके, आप आसानी से डुप्लीकेट भी हटा सकते हैं:
;WITH LastPerUser AS
(
SELECT
ID, UserID, ClassID, SchoolID, Created,
ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum'
FROM dbo.YourTable
)
DELETE FROM dbo.YourTable t
FROM LastPerUser cte
WHERE t.ID = cte.ID AND cte.RowNum > 1
एक ही सिद्धांत लागू होता है:आप कुछ मानदंडों द्वारा अपने डेटा को "समूह" (या विभाजन) करते हैं, आप प्रत्येक डेटा विभाजन के लिए लगातार सभी पंक्तियों को क्रमित करते हैं, और "विभाजित पंक्ति संख्या" के लिए 1 से बड़े मान वाले को <कोड द्वारा हटा दिया जाता है>हटाएं ।