Solved

Top n from each parentID ?

Posted on 2009-05-15
5
353 Views
Last Modified: 2012-05-07
Hi,

How can i select top n rows for each parentID, in MS SQL 2005 database
( this is very big table so i cant use functions, recursion etc, i think subquery will slow it down too)

Example table

parentID    someID   someOtherColums
1                   5
1                   6
1                   7
2                   8
2                   11
2                   23
3                   25
3                   20
4                   1
5                   3
5                   4
5                   31

now i need to select no more than 2 rows for each parentID, i will write my own logic wich 2 (first, last, some other filter, but lets asume i need first 2)

so results would look like:

1                   5
1                   6
2                   8
2                   11
3                   25
3                   20
4                   1
5                   3
5                   4


tnx
0
Comment
Question by:PapaStrumpf
5 Comments
 
LVL 57

Accepted Solution

by:
Raja Jegan R earned 350 total points
ID: 24393398
This should help you out:
SELECT parentID,someID, someOtherColums
FROM (
SELECT parentID,someID, someOtherColums, ROW_NUMBER() OVER ( partition BY parentID ORDER BY someID) rnum
FROM urtable) temp
WHERE rnum <=2 

Open in new window

0
 
LVL 1

Expert Comment

by:valerka
ID: 24393414
You have to use cursors with counters. Fill the temporary table with cursor and select from it.
0
 
LVL 31

Expert Comment

by:RiteshShah
ID: 24393499
>>You have to use cursors with counters. Fill the temporary table with cursor and select from it.<<

Author can't even use function, recursion and you are talking about CURSOR :)
0
 
LVL 31

Assisted Solution

by:RiteshShah
RiteshShah earned 150 total points
ID: 24393546
if you want all records with tie than you can use, there is not much difference in the solution given by rrjegan17 and mine. there is just a little change.


SELECT parentID,someID, someOtherColums
FROM (
SELECT parentID,someID, someOtherColums, RANK() OVER ( partition BY parentID ORDER BY someID) rnum
FROM urtable) temp
WHERE rnum <=2 

Open in new window

0
 

Author Closing Comment

by:PapaStrumpf
ID: 31581835
Tnx for help.
I split some points to RiteshShah becouse actually i will need that Rank thing, and i didnt know it exists.
0

Featured Post

U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
SELECT query on two levels (detail and summary) 13 47
SQL Help 27 40
Sql server insert 13 26
why sql server only update some statistics in the database ? 3 19
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
JSON is being used more and more, besides XML, and you surely wanted to parse the data out into SQL instead of doing it in some Javascript. The below function in SQL Server can do the job for you, returning a quick table with the parsed data.
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Via a live example, show how to set up a backup for SQL Server using a Maintenance Plan and how to schedule the job into SQL Server Agent.

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now