编辑:我删除了前面的SQL查询,使事情更容易-不需要像我前面说的那样连接两个查询。stock_tracking_negociacao
表(为了简化,我只过滤了一个代码“LEVE 3”):
#;data;tipo;mercado;ticker;quantidade;preco;valor
606;2019/12/02;Compra;Mercado à Vista;LEVE3;400;24.95;9980
437;2020/03/19;Compra;Mercado à Vista;LEVE3;100;18.05;1805
775;2021/06/10;Venda;Mercado à Vista;LEVE3;200;35.74;7148
716;2021/08/11;Venda;Mercado à Vista;LEVE3;300;33.6;10080
1214;2022/07/21;Compra;Mercado à Vista;LEVE3;600;23.7;14220
1564;2023/03/13;Compra;Mercado à Vista;LEVE3;200;32;6400
其中:
- 数据=日期
- tipo:'Compra' = 'Buy' and 'Venda' = 'Sell'
- quantidade =数量
- preco =价格
- 价值=金额 * 价格
我需要用相同的stock_tracking_negociacao
表构建一个查询。表必须按日期(data
)从最早记录到最新记录排序。
我的目标是为每一行构建两个新列(不管它出现了多次):balance
和avg_price
。
解释新列:
- balance:如果
tipo
=Compra
,我们需要从以前的记录中添加quantidade
。否则,如果tipo
=Venda
,我们需要从以前的记录中减去quantidade
。每个自动收报机的第一条记录有balance
=quantidade
。 - avg_price:如果
tipo
=Compra
,则((preco * quantidade) + ([previous] balance * [previous] avg_price)) / (quantidade + [previous] balance)
。如果tipo
=Venda
,则avg_price
=[previous] avg_price
。每个自动收报机的第一条记录有avg_price
=preco
。在MS Excel中,它与SUMPRODUCT
非常相似。
预期结果:
谢谢
1条答案
按热度按时间juud5qan1#
您现有的查询能够产生想要的结果,我也包含了前面的quantidade,但似乎不需要:
fiddle