我在MSSQL数据库中有一个简单的视图。它包含以下字段:

report_id INT
ym VARCHAR -- YYYY-MM
keyword VARCHAR(MAX)
visits INT


我可以通过以下查询轻松获得前10个关键字匹配:

SELECT TOP 10 *
FROM top_keywords
WHERE ym BETWEEN '2010-05' AND '2010-05'
ORDER BY visits DESC


现在,棘手的地方是我必须在给定日期范围(report_id)中获取每个ym BETWEEN @start_date AND @end_date的前10条记录。

如何获得每个report_id的前10名?我偶然发现了涉及使用ROW_NUMBER()和RANK()的建议,但是在实现方面却大为失败。

最佳答案

怎么样

SELECT *
FROM (SELECT *,
         ROW_NUMBER() OVER(PARTITION BY report_id ORDER BY (SELECT 0)) AS RN
         FROM top_keywords
         WHERE ym BETWEEN '2010-05' AND '2010-05') TK
WHERE RN <= 10

关于sql - 通过report_id获取排名前'n'的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2946170/

10-09 20:23