Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एसक्यूएल:डुप्लिकेट निकालें

विंडो फ़ंक्शन के लिए एक पाठ्यपुस्तक उम्मीदवार 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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL उदाहरण) में 'datetimeoffset' को 'तिथि' में बदलें

  2. एक एसक्यूएल चर के लिए निष्पादन परिणाम कैसे असाइन करें?

  3. पता करें कि क्या ऑब्जेक्ट OBJECTPROPERTY () के साथ SQL सर्वर में उपयोगकर्ता-परिभाषित तालिका है

  4. त्रुटि:लिंक किए गए सर्वर ADSI के लिए OLE DB प्रदाता ADsDSOObject से एक पंक्ति प्राप्त नहीं कर सकता

  5. मैं सबसे महंगी क्वेरी कैसे लॉग और ढूँढ सकता हूँ?