Выберите лучшие n записей из каждой категории в одной таблице - PullRequest
1 голос
/ 22 марта 2012

У меня есть таблица сведений о покупке, в которой есть item id, purchase date и item unit cost.

Я хочу получить среднюю стоимость покупки предмета, выбрав последние две лучшие записи из каждого идентификатора предмета.

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

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Попробуйте это:

;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 голосов
/ 22 марта 2012
;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 голосов
/ 21 апреля 2012
SELECT AVG(unitprice) as price from yourtablename 
 where unitprice IN 
 (
    SELECT TOP 3 (unitprice) from yourtablename
     where itemid='1'
     ORDER BY unitprice Desc
 );

Получить itemid через выпадающий список или текстовое поле.Вам это не полезно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...