【问题标题】:TSQL Weighted AverageSQL 加权平均值
【发布时间】:2017-04-16 00:46:20
【问题描述】:

我正在尝试创建一个 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 日 7 日、1 月 10 日 5 日和 1 月 1 日 3 日的平均成本。

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

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    平均重量很简单:

    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;
    

    【讨论】:

    • @Craig。 . .您正在使用 LIFO 方法,这似乎与“加权平均”方法不同。
    • 你是对的(会计可能不是我的强项)。加权平均值似乎是最不准确的 IMO,但这正是客户想要的。
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多