Sql 从同一表中的每个类别中选择前n个记录
我有一个采购明细表,其中包含项目id、采购日期和项目单位成本 我想通过从每个项目id中选择最新的前2条记录来获得项目采购成本的平均值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
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
);