ROW_NUMBER
Numera las filas 1, 2, 3… en un orden dado: en todo el resultado o dentro de cada grupo.
Sintaxis
ROW_NUMBER() OVER (ORDER BY <criterio de orden>)
ROW_NUMBER() OVER (PARTITION BY <grupo> ORDER BY <criterio de orden>)
Una función de ventana: no reduce el número de filas, sino que añade a cada una su número. PARTITION BY reinicia la numeración en cada grupo; así se construye «el top N de cada categoría».