Serveur Microsoft SQL pour sélectionner le groupe Top N

Il y a beaucoup de réponses sur la façon de sélectionner n lignes de chaque groupe. Mais ce que je cherche est de sélectionner chaque ligne du groupe N supérieur, par exemple j'ai datatables ci-dessous:

id group 1 a 2 a 3 b 4 c 5 c 6 d 7 d ....... 

Si je veux sélectionner Top 3 Group, mes résultats prévus ci-dessous:

  1 a 2 a 3 b 4 c 5 c 

Comment puis-je y parvenir avec Microsoft SQL Server 2008?

Une option consiste à utiliser une sous-requête qui sélectionne les N premiers groupes:

 SELECT t1.id, t1.group FROM yourTable t1 INNER JOIN ( SELECT DISTINCT TOP(N) group FROM yourTable ORDER BY group ) t2 ON t1.group = t2.group 

Vous pouvez rank vos rangs par groupe et ensuite prendre seulement les trois premiers:

 SELECT [id], [group] FROM (SELECT [id], [group], RANK() OVER (ORDER BY [group] ASC) rk FROM mytable) t WHERE rk <= 3 

@Tim: Je viens de modifier votre requête.

 SELECT t1.id, t1.group FROM yourTable t1 INNER JOIN ( SELECT TOP N group FROM yourTable GROUP BY group --ORDER BY group USE IT IF YOU WANT ) t2 ON t1.group = t2.group