sql >> Database teknologi >  >> RDS >> Sqlserver

Rækkerne med det gruppemæssige maksimum af en bestemt kolonne (hvordan man dræber dubletter...)

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å ved at bruge ROW_NUMBER() for at tildele hver række et trinvis tal, som nulstilles til 1 for hver ny X-værdi. For rækker med den samme værdi for X tildeles rækkenummeret trinvist sorteret efter Y DESCENDING og ID ASCENDING - så for en bestemt X-værdi vil rækkenummer 1 blive tildelt den med den HØJESTE Y-værdi og den LAVESTE ID-værdi. Vi tilføjer derefter en begrænsning til kun at returnere dem, hvor RowNo er 1.



  1. PHP Multiple Update-funktionen opdateres ikke og får den første række tom

  2. Slet fra mange til mange forhold i MySQL

  3. Indsæt i tabel ved hjælp af array-metoden med overordnet ID

  4. Hvordan viser jeg de sidste forespørgsler udført på MySQL?