Désolé pour le titre des ordures mais j'espère que cela va expliquer:
Compte tenu du tableau
name | data --------------------- 1 | 1000 1 | 2000 1 | 3000 2 | 1500 2 | 2500 2 | 3500
Je veux être en mesure de sélectionner le sumt (x) pour tous les noms classés par la valeur de données. Donc, si x = 2, le return sera
name | data --------------------- 1 | 2000 1 | 3000 2 | 2500 2 | 3500
;with cte AS ( SELECT name, data, ROW_NUMBER() OVER (PARTITION BY name ORDER BY data DESC) AS RN FROM YourTable ) SELECT name, data FROM cte WHERE RN<=2 ORDER BY name, data
Un moyen un peu universel serait ( n'avait pas vu les balises éditées qui ont spécifié le server sql )
Select name, data From <table> tbl Where data In ( Select Top 2 Distinct data From <table> Where name = tbl.name Order By data Desc )