विंडो फ़ंक्शन के लिए एक पाठ्यपुस्तक उम्मीदवार row_number():
;WITH x AS (
SELECT unique_ID
,row_number() OVER (PARTITION BY worker_ID,type_ID ORDER BY date) AS rn
FROM tbl
)
DELETE FROM tbl
FROM x
WHERE tbl.unique_ID = x.unique_ID
AND x.rn > 1
यह उस स्थिति का भी ध्यान रखता है जहां (worker_ID,type_ID)
पर ठगी का एक सेट वही date
साझा करता है .
सरलीकृत डेटा पर डेमो देखें। ए> ।
सरल संस्करण के साथ अपडेट करें
पता चला, इसे सरल बनाया जा सकता है:SQL सर्वर में आप CTE से सीधे हटा सकते हैं:
;WITH x AS (
SELECT unique_ID
,row_number() OVER (PARTITION BY worker_ID,type_ID ORDER BY date) AS rn
FROM tbl
)
DELETE x
WHERE rn > 1