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 है।