Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从同一表中的每个类别中选择前n个记录_Sql_Sql Server_Tsql_Sql Server 2008 R2_Greatest N Per Group - Fatal编程技术网

Sql 从同一表中的每个类别中选择前n个记录

Sql 从同一表中的每个类别中选择前n个记录,sql,sql-server,tsql,sql-server-2008-r2,greatest-n-per-group,Sql,Sql Server,Tsql,Sql Server 2008 R2,Greatest N Per Group,我有一个采购明细表,其中包含项目id、采购日期和项目单位成本 我想通过从每个项目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

我有一个采购明细表,其中包含项目id、采购日期和项目单位成本

我想通过从每个项目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,请尝试以下操作:

;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
试试这个:

;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
通过dropdownlist或textbox获取itemid。 这对你没用吗

通过dropdownlist或textbox获取itemid。 这对你没用吗

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