Sorry for the rubbish title but hopefully this will explain:
Given the table
 name     |   data
---------------------
   1      |   1000
   1      |   2000
   1      |   3000
   2      |   1500
   2      |   2500
   2      |   3500
I want to be able to select the top( x ) for all names ordered by the data value. So if x = 2 the return will be
 name     |   data
---------------------
   1      |   2000
   1      |   3000
   2      |   2500
   2      |   3500
                ;with cte AS
(
SELECT name, data, ROW_NUMBER() OVER (PARTITION BY name ORDER BY data DESC) AS RN
FROM YourTable
)
SELECT name, data
FROM cte 
WHERE RN<=2
ORDER BY name, data
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With