TSQL加权平均值

时间:2017-04-16 00:46:20

标签: sql sql-server tsql

我正在尝试创建TSQL函数来计算库存计算的加权平均成本。所以给出了下面的表格结构

ProductId | DatePurchased | Qty | Cost
--------- | ------------- | --- | ----
1         | Jan 1         | 10  | 1.50
1         | Jan 10        | 5   | 2.00
1         | Jan 20        | 7   | 2.50

现在如果在1月21日有人购买了15加权费用

((7 * 2.5)+(5 * 2.0)+(3 * 1.5))/ 15 = 2.13

基本上,这是1月20日的平均成本,1月10日的5月和1月1日的平均成本。

我确信这可以通过某种递归CTE来完成,但是比我更聪明的人。

1 个答案:

答案 0 :(得分:2)

重量平均值很简单:

select sum(qty * cost) / sum(qty)
from t;

你正在寻找别的东西。也许是“分配”的平均值:

select sum(case when cume_qty - qty < 15 then qty * cost
                else (cume_qty - 15) * cost
           end) as allocated_average
from (select t.*,
             sum(qty) over (partition by productid order by date desc) as cume_qty
      from t
     ) t
where cume_qty - qty < 15 and
      cume_qty >= 15;