Question : SELECT TOP n of each

I want to select the TOP n records from a table for each of the possible values of another field. What is the best way to do that in a single query?

I came up with this:

SELECT TOP 5 <fields> FROM <table> WHERE <fk_field> = 1 ORDER BY insert_date
UNION
SELECT TOP 5 <fields> FROM <table> WHERE <fk_field> = 2 ORDER BY insert_date
....
(etc)

but that requires that I need to hardcode all values of <fk_field> and I do not want that. <fk_field> is a foreign key, so it is not too hard to get all possible values with a query.

I could use that in a stored procedure filling a temp_table with a number of queries. But I wonder is there is a better method.





Answer : SELECT TOP n of each

SQL Server 2005+

SELECT <fields>
FROM
(
SELECT <fields>, rn=row_number() over (partition by <fk_field> order by insert_date)
FROM <table>
) SQ
WHERE rn<=5
--ORDER BY insert_date
Random Solutions  
 
programming4us programming4us