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 서버 2008 R2

답변

4

이 시도 사용하고 있습니다 : 당신이 CALC 평균 최신 두 개의 레코드와 함께,하지만 당신이 GROUP BY을 추가 할 수있는 방법을

;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 

잘 모르겠어요 필요한 경우 검색어로 그런

아마 뭔가 :

-- 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 
); 

이 DropDownList로 또는 텍스트 상자를 통해 상품 ID를 가져옵니다. 당신에게 유용하지 않습니까?

관련 문제