I have a simple view in my MSSQL database. It consists of the following fields:
report_id INT
ym VARCHAR -- YYYY-MM
keyword VARCHAR(MAX)
visits INT
I can easily get the top 10 keyword hits with the following query:
SELECT TOP 10 *
FROM top_keywords
WHERE ym BETWEEN '2010-05' AND '2010-05'
ORDER BY visits DESC
Now where it gets tricky is where I have to get the top 10 records for each report_id
in the given date range (ym BETWEEN @start_date AND @end_date
).
How would I go about getting the top 10 for each report_id? I've stumbled across suggestions involving the use of ROW_NUMBER() and RANK(), but have been vastly unsuccessful in their implementation.
Not tested (since I don't have a mssql install at home), but this should be close...
Do you want to do a single query or a series of queries? For a series of queries, you can
Or do you really want a giant query that will give you all the results? How many results do you want, 10 per report id?
How about