我在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/