如何创建 SQL 查询来收集移动平均库存同行交易
我有购买价格
我的报告
商品名称 | 加 | 分钟 | 价格 | 平均 |
---|---|---|---|---|
iPhone 13 | 5.00 | 0.00 | 500K | 500K |
iPhone 13 | 0.00 | 1.00 | 700K | 500K |
iPhone 13 | 0.00 | 1.00 | 750K | 500K |
iPhone 13 | 3.00 | 0.00 | 600K | 我需要获得新的AVG |
iPhone 13 | 0.00 | 1.00 | 700K | 平均 |
iPhone 13 | 0.00 | 1.00 | 750K | 平均 |
我已经在销售发票中保存了平均值,但这使得报告有时不正确,因为有时购买日期不正确并且客户更改日期。
此时所有平均值都不正确。
我通过这种方式收集报告中的平均值。
购买价格 = APayAmountTotal 购买数量 = APlus
SalePrice = MPayAmountTotal(来自保存的平均值) 销售价格数量 = MPlus
(APayAmountTotal/ APlus ) - (MPayAmountTotal / MPlus ) = 新平均值
我需要删除这个(MPayAmountTotal / MPlus)
我需要获得平均值而不保存平均输出数量。
(作为评论会很混乱)
目前尚不清楚您要问什么,鉴于示例数据,您应该显示所需的结果并解释为什么应该得到该结果。对于“移动平均线”之类的内容,您需要一列来对其进行排序 - 例如 transactionDateTime。下面是使用自动生成的 id 作为排序列的入门示例:
select ItemName, Plus, Mins, Price,
avg(Price) over (partition by ItemName order by id) as movingAvg
from myTable;
编辑:重读并努力理解你的意思,这可能就是你正在寻找的:
select ItemName, Plus, Mins, Price,
sum(case when Plus > 0 then Price*Plus end)
over (partition by ItemName order by id) /
sum(case when Plus > 0 then Plus end)
over (partition by ItemName order by id)
as movingAvg
from myTable;