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