我有一个包含交易列表的表:SQL损益库存查询
Security ; Quantity ; Price ; Consid
1. IBM ; +1,000 ; 20 ; -20k
2. IBM ; +2,000 ; 22 ; -44k
3. IBM ; -1,000 ; 30 ; +30k
4. IBM ; -2,000 ; 20 ; +40k
5. IBM ; -2,000 ; 20 ; -20k
所以损益基本Consid列的总和,因此加入贸易#5之前的损益会+ 6K。
贸易#5增加后,这表明PnL为-14k,这不是真的反映我们的立场。
我想要的是过滤未关闭的交易的某种方式?所以当我们添加了2k IBM股票的购买时,交易#5将被允许进入总和。
我在这个INTIAL尝试是:
set @Ret = @Ret + isnull((SELECT SUM(GC) AS GS
FROM (SELECT SUM(GrossConsid) * - 1 AS GC
FROM Trades AS CT
WHERE (SpecialCond = 'Prop') AND (SettType <> 'Futures') AND (TrdDt <= @Date) AND (TrdDt >[email protected]) AND (Name = 'my_Comp')
GROUP BY ABS(Quantity)
HAVING (SUM(Quantity) = 0)) AS dt),0)
但我没有想通了,有一个边缘状态,其中通过,如果我有一个行业与+ 5的量,+ 5,-5它不计算在内,因为(SUM(Quantity) = 0))
的计算结果为false。
有关如何纠正此问题的任何想法?
感谢克里斯
如果购买方是你的正数的交易卖方是负数量交易,你怎么知道5号位并不近,但4号位是?你是否有另外一个专栏或指标,表明第4位属于第2位的交易?例如,它仅仅是表中列出的交易顺序,所以位置5是最后一个,所以必须是开放位置? – 2011-04-14 17:15:20