Can you please let me know how to select first 10 rows for every cusip in the below table
x
SELECT [dt_dim_id],
[cusip_num],
sr.[product_dim_id],
[acct_dim_id],
[product_name]
FROM [csr_prod].[dbo].[stock_rec] AS sr,
[csr_prod].[dbo].[product_dim] AS pd
WHERE sr.product_dim_id = pd.product_dim_id
AND dt_dim_id = 20180927
ORDER BY dt_dim_id,
product_dim_id,
acct_dim_id;
Advertisement
Answer
Use ROW_NUMBER()
with a partition over your groups and order by whatever you need, then filter for the first 10 rows:
;WITH paging AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY cusip_num
ORDER BY dt_dim_id, product_dim_id, acct_dim_id) n,
[dt_dim_id],
[cusip_num],
sr.[product_dim_id],
[acct_dim_id],
[product_name]
FROM [csr_prod].[dbo].[stock_rec] AS sr,
[csr_prod].[dbo].[product_dim] AS pd
WHERE sr.product_dim_id = pd.product_dim_id
AND dt_dim_id = 20180927
)
SELECT * FROM paging WHERE n <= 10