我有以下商品收入表
CREATE TABLE ingresos_mercancias_detalle
(
id serial NOT NULL,
id_producto integer,
cantidad double precision,
precio_entrada double precision,
fecha date,
CONSTRAINT pk_ingresos_detalle PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
她将从我们记录日期、金额和成本的每个产品中获得 x 数量的收入
我想要的是根据给定数量找出加权平均值,例如:
我的表中有这些数据
insert into ingresos_mercancias_detalle values(1,1,5,100,'2019-12-01');
insert into ingresos_mercancias_detalle values(2,1,8,120,'2019-12-05');
insert into ingresos_mercancias_detalle values(3,1,10,80,'2019-12-07');
insert into ingresos_mercancias_detalle values(4,1,2,300,'2019-12-20');
insert into ingresos_mercancias_detalle values(5,1,4,200,'2019-12-30');
我有这个查询
select id_producto, sum(cantidad) as cantidad, sum(precio_entrada*cantidad) as total_entrada, (sum(precio_entrada*cantidad)/sum(cantidad)) as promedio_ponderado from ingresos_mercancias_detalle group by id_producto
它返回以下数据:
在那之前一切都很容易,我的问题是当我想知道最后X 个产品的加权平均值时。
示例: 我想找出最近19 个产品的加权平均值
为此,您应该按日期从最新到最旧排序记录并添加数量(绿色选择)
select * from ingresos_mercancias_detalle order by fecha desc
然后我会采取
- 4日期为 2019-12-30 的记录
- 2019-12-20的记录
- 2019-12-07 记录的10
- 2019 年 12 月 5 日记录中的3条(完成 19 条的 8 条中只有 3 条)
总共 19 这会给我一个加权平均值
((4*200)+(2*300)+(10*80)+( 3 *120)) / 19 = 124,210
如何使查询使用我给它的金额(它将从软件发送)并返回给定金额的加权平均值?
谢谢。
我将提出
sql
一个基本商品的替代方案,第一件事是根据销售数量知道我们将从每一行中获取多少数量,并使用该数量获得每行的 weighted_price:结果:
查询是在同一张表上的递归,计算累计和和一些逻辑,
case
以了解我们何时达到数量限制。使用此查询,它postgresql
(至少)可以将其用作子查询来获得按产品加权的最终总和:结果:
注释:
((4*200)+(2*200)+(10*80)+(3*120))
不过是((4*200)+(2*300)+(10*80)+(3*120))