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
Jadi, menggunakan ROW_NUMBER() untuk menetapkan setiap baris nomor tambahan yang diatur ulang ke 1 untuk setiap nilai X baru. Untuk baris dengan nilai X yang sama, nomor baris ditetapkan secara bertahap diurutkan oleh Y DESCENDING dan ID ASCENDING - jadi untuk nilai X tertentu, baris nomor 1 akan ditetapkan ke baris dengan nilai Y TERTINGGI dan nilai ID TERENDAH. Kami kemudian menambahkan batasan untuk hanya mengembalikan yang di mana RowNo adalah 1.