我有一个名为Transactions的表,如下所示:
Id | date | type | price | quantity | buysell
1 | 0001 | 1 | 1.00 | 3 | buy
2 | 0002 | 2 | 5.00 | 1 | buy
3 | 0003 | 3 | 0.30 | 2 | buy
4 | 0006 | 1 | 1.50 | 1 | sell
5 | 0007 | 4 | 7.00 | 12 | buy
6 | 0011 | 2 | 6.00 | 1 | sell
7 | 0015 | 3 | 0.50 | 2 | sell
8 | 0016 | 1 | 1.50 | 2 | sell
9 | 0017 | ....
我需要找到一种方法,将所有sell
交易与相关的buy
交易相匹配。这应该在fifo原则中完成:在上面的示例中,事务4
应该与1
,6
到2
,7
到{{1 }和3
到8
(取决于1
)。此外,必须考虑type
字段 - 例如,交易quantity
有两个完成的卖出交易,总计达1
的购买数量。
有没有办法用mysql或任何其他数据库系统实现这一点?
修改
所需的结果集可以是例如所有卖出交易及其相关买入交易的表格:
3
根据此表,我可以计算边际或卖东西的时间(例如)。
答案 0 :(得分:0)
您可以尝试以下型号
select *,
(select sum(case when buysell='buy' then quantity else -quantity end) from yourTable a
where a.type1=b.type1 and a.date1<=b.date1) bls
from yourTable b order by type1,id