Select top n records from each category within same table

非 Y 不嫁゛ 提交于 2019-12-11 12:05:23

问题


I've a purchase detail table that has item id, purchase date, and item unit cost.

I want to get an avg of an item purchase cost by selecting latest top 2 records from each item id.

Item id, purchase date, unitprice
1        3/1/2012        10
1        3/11/2012        8
2        3/1/2012        10
2        3/11/2012        10
1        2/1/2012        9
3        3/1/2012        10
3        3/11/2012        1
3        3/12/2012        13

I'm using sql server 2008 r2


回答1:


Try this:

;WITH CTE AS (
    SELECT [Item id], [purchase date], unitprice, 
        ROW_NUMBER() OVER(PARTITION BY [Item id] ORDER BY [purchase date] DESC) rn
    FROM your_table
)
SELECT [Item id], [purchase date], unitprice
FROM CTE
WHERE rn < 3

I'm not sure how can you calc avg with latest two records, but sure you can add GROUP BY to the query if you need.

Maybe something like that:

-- CTE here --
SELECT [Item id], AVG(unitprice)
FROM CTE
WHERE rn < 3
GROUP BY [Item id]



回答2:


;WITH CTE AS (
    SELECT    [Item id]
            , [purchase date]
            , [unitprice]
            , [avg] = AVG([unitprice]) OVER(PARTITION BY [Item id])
            , [rnum] =  ROW_NUMBER() OVER(PARTITION BY [Item id] ORDER BY [purchase date] DESC)
    FROM    T
)
SELECT [Item id], [purchase date], [unitprice], [avg]
FROM CTE
WHERE rnum < 3



回答3:


SELECT AVG(unitprice) as price from yourtablename 
 where unitprice IN 
 (
    SELECT TOP 3 (unitprice) from yourtablename
     where itemid='1'
     ORDER BY unitprice Desc
 );

Get the itemid through dropdownlist or textbox. Is't useful to you ?



来源:https://stackoverflow.com/questions/9816260/select-top-n-records-from-each-category-within-same-table

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!