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
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]
;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
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 ?