1

我有一个购买详细信息表,其中有item id,purchase dateitem unit cost从同一表格中的每个类别中选择前n条记录

我想通过从每个项目ID中选择最新的前2条记录来获得项目购买成本的平均值。

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 

我使用SQL Server 2008 R2

回答

4

试试这个:

;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 

我不知道你怎么能计算的平均使用最新的两项纪录,但肯定可以添加GROUP BY到需要的查询。

也许这样的事情:

-- 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 
0
SELECT AVG(unitprice) as price from yourtablename 
where unitprice IN 
(
    SELECT TOP 3 (unitprice) from yourtablename 
    where itemid='1' 
    ORDER BY unitprice Desc 
); 

通过下拉列表或文本框获取的itemid。 对你有用吗?