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

समूह-वार अधिकतम एक निश्चित कॉलम रखने वाली पंक्तियाँ (डुप्लिकेट को कैसे मारें ...)

DECLARE @Data TABLE (ID INTEGER, X INTEGER, Y INTEGER)
INSERT @Data VALUES (1,1,1),(2,1,2),(3,1,2),(4,1,3),(5,1,3),
    (6,2,4),(7,2,5),(8,2,5),(9,2,5),(10,3,1),(11,3,10),(12,3,10)

;WITH CTE AS
(
SELECT ID, X, Y, 
    ROW_NUMBER() OVER(PARTITION BY X ORDER BY Y DESC, ID ASC) AS RowNo
FROM @Data
)

SELECT ID, X, Y FROM CTE WHERE RowNo = 1

इसलिए, ROW_NUMBER() प्रत्येक पंक्ति को एक वृद्धिशील संख्या निर्दिष्ट करने के लिए जो प्रत्येक नए X मान के लिए 1 पर रीसेट हो जाती है। X के लिए समान मान वाली पंक्तियों के लिए, पंक्ति संख्या को Y DESCENDING और ID ASCENDING द्वारा क्रमिक रूप से क्रमित किया जाता है - इसलिए किसी विशेष X मान के लिए, पंक्ति संख्या 1 को उच्चतम Y मान और निम्नतम ID मान वाले को असाइन किया जाएगा। फिर हम केवल उन्हीं को वापस करने के लिए एक प्रतिबंध जोड़ते हैं जहां RowNo 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 सर्वर में इसका उपयोग करना है

  2. SQL सर्वर 2016:हमेशा एन्क्रिप्टेड

  3. SQL सर्वर:PIVOTing String डेटा के उदाहरण

  4. SQL सर्वर स्कीमा और डिफ़ॉल्ट स्कीमा

  5. newid () sql सर्वर फ़ंक्शन के अंदर