Fifo排序一个sql表

时间:2016-06-22 21:00:10

标签: mysql sql database

我有一个名为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应该与1627到{{1 }和38(取决于1)。此外,必须考虑type字段 - 例如,交易quantity有两个完成的卖出交易,总计达1的购买数量。

有没有办法用mysql或任何其他数据库系统实现这一点?

修改

所需的结果集可以是例如所有卖出交易及其相关买入交易的表格:

3

根据此表,我可以计算边际或卖东西的时间(例如)。

1 个答案:

答案 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