sql >> Databasteknik >  >> RDS >> Sqlserver

Raderna som håller det gruppmässiga maxvärdet för en viss kolumn (hur man dödar dubbletter...)

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

Så, med ROW_NUMBER() för att tilldela varje rad ett inkrementellt nummer som återställs till 1 för varje nytt X-värde. För rader med samma värde för X tilldelas radnumret inkrementellt sorterat efter Y DESCENDING och ID ASCENDING - så för ett visst X-värde kommer radnummer 1 att tilldelas den med det HÖGSTA Y-värdet och det LÄGSTA ID-värdet. Vi lägger sedan till en begränsning för att endast returnera de där RowNo är 1.



  1. Hur man returnerar alla otillförlitliga CHECK-begränsningar i SQL Server (T-SQL-exempel)

  2. Hur aktiverar man PDO på AppServ på Windows?

  3. ClassNotFoundException När du kör JDBC genom Javas Servlets

  4. använder du kopiera i postgresql?