J'ai une vue simple dans ma base de données MSSQL. Il se compose des domaines suivants:Obtenir les meilleurs enregistrements 'n' par report_id
report_id INT
ym VARCHAR -- YYYY-MM
keyword VARCHAR(MAX)
visits INT
Je peux facilement obtenir le 10 mot-clé hits avec la requête suivante:
SELECT TOP 10 *
FROM top_keywords
WHERE ym BETWEEN '2010-05' AND '2010-05'
ORDER BY visits DESC
Maintenant où il devient délicat est là que je dois obtenir les 10 premiers dossiers pour chaque report_id
dans la plage de dates indiquée (ym BETWEEN @start_date AND @end_date
).
Comment pourrais-je obtenir le top 10 pour chaque report_id? J'ai trébuché sur des suggestions impliquant l'utilisation de ROW_NUMBER() et RANK(), mais ont été largement échoué dans leur mise en œuvre.
+1 Beaucoup plus simple que le mien. Je ne sais pas pourquoi j'ai raccroché en faisant un JOIN complètement inutile! Vous avez laissé un 'SELECT 0' plutôt que des' desc descends '. –
Alors que les autres étaient un peu serviables, c'était presque parfait pour ce dont j'avais besoin. J'ai changé le 'ORDER BY' pour utiliser le champ' visits', et tout va bien. Merci! – Skudd
Cela m'a aidé, merci. –