Solved

Top n from each parentID ?

Posted on 2009-05-15
5
330 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
Comment Utility
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
Comment Utility
You have to use cursors with counters. Fill the temporary table with cursor and select from it.
0
 
LVL 31

Expert Comment

by:RiteshShah
Comment Utility
>>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
Comment Utility
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
Comment Utility
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

Free Gift Card with Acronis Backup Purchase!

Backup any data in any location: local and remote systems, physical and virtual servers, private and public clouds, Macs and PCs, tablets and mobile devices, & more! For limited time only, buy any Acronis backup products and get a FREE Amazon/Best Buy gift card worth up to $200!

Join & Write a Comment

Let's review the features of new SQL Server 2012 (Denali CTP3). It listed as below: PERCENT_RANK(): PERCENT_RANK() function will returns the percentage value of rank of the values among its group. PERCENT_RANK() function value always in be…
For both online and offline retail, the cross-channel business is the most recent pattern in the B2C trade space.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
Via a live example, show how to setup several different housekeeping processes for a SQL Server.

743 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