Microsoft
Software
Hardware
Network
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
Configure TFS 2010 with Sharepoint 2010
Thunderbird inexplicably crashing....
Problem with Shared HP CP2025dn Network Printer on Server 2003
IPAD Question
MacBook Stuck on Shut-Down
Backup Exec - Byte Count vs. Capacity Discrepancy
How to locak down Windows 7 PRO workstations
Maxtor Drive getting 'lost'
"Ad Zoo .Net" ??
How can I change the created and/or modified date of a FOLDER?