大家好。我在写一个证券买卖纪录和会计系统。如大家平常所见,证券成本的计价是用移动平均成本方法(相对于先进先出和后进先出)来计算仓里的证券的价格。但我尝试写一个查询时,被一个地方絆住了。我知道论坛上有许多做会计系统的高手,希望大家能帮忙指点一下。背景介绍:这种证券是一个折价证券,也就是该证券以折扣价买入,买入价(字段:仓内成本变动=面值*折扣率)和面值之间的差额是利息收入。所以“面值”可以理解成“数量”,“折扣率”可以理解成单价。如下表,账户,证券名,交易日,到期日,面值,折扣率是填入的,而需要用到计算移动加权平均成本的字段是:交易日,面值和折扣率。为了简化,面值为正时,交易为买入,为负的是卖出。账户 证券名   交易日    到期日              面值          折扣率
4602324 HBOs 15-Aug-07 25-Oct-07 $7,500,000.00 0.99
4602324 HBOs 21-Sep-07 25-Oct-07 $10,000,000.00 0.99517
4602324 HBOs 24-Sep-07 25-Oct-07 $10,000,000.00 0.9956
4602324 HBOs 26-Sep-07 25-Oct-07 -$5,000,000.00 0.9958
4602324 HBOs 11-Oct-07 25-Oct-07 $10,000,000.00 0.998
计算出来的字段为:(由于版面宽度,只能分两次贴,不好意思)
现金变动           仓内成本变动 仓内累计面值 仓内累计成本 平均成本
-$7,425,000.00 $7,425,000.00 $7,500,000.00 $7,425,000.00  0.99000 
-$9,951,700.00 $9,951,700.00 $17,500,000.00 $17,376,700.00  0.99295 
-$9,956,000.00 $9,956,000.00 $27,500,000.00 $27,332,700.00  0.99392 
$4,979,000.00 -$4,969,581.82 $22,500,000.00 $22,363,118.18  0.99392 
-$9,980,000.00 $9,980,000.00 $32,500,000.00 $32,343,118.18  0.99517 我在另外一个论坛贴上了我的图片和excel示例文件。如需要请来这里下载:
http://www.accessbbs.cn/bbs/viewthread.php?tid=8416&page=1&extra=page%3D1#pid57651在以上两个表格中,头三行是买入。买入时,仓内成本变动=面值*折扣率,仓内累计面值=sum(面值) where 交易日<=该行的交易日,仓内累计成本=sum(仓内成本变动) where 交易日<=该行的交易日,平均成本=仓内累计成本/仓内累计面值。“沧海内累计面值”和“仓内累计成本的公式都不会因交易种类是买入或卖出而变化,但”仓内成本变动“在卖出时公式会不同,请看下面:第四行卖出,问题就来了。卖出时,仓内成本变动=的公式要变成面值*该行之前一行的平均成本(第三行的平均成本)。而第三行的平均成本=仓内累计成本/仓内累计面值,所以实际上要引用到第四行之前的“仓内成本变动”这样的两个字段之间(在不同行数)互相引用的sql我想不出来怎么写才好。请大家指教!

解决方案 »

  1.   

    你的逻辑,我是看不下去了。你要是想参照其他行的数据的话,可以用分析函数lag和lead,
    分别来取自己之前或者之后的数据的。
      

  2.   

    按照我的理解,是前后行的数据有相关性,数学问题就是解个方程
    不知道sql能写出来不?
    lag是不行的,lead没用过
      

  3.   

    其实逻辑就是每一次买入,仓内的平均成本都会变,但卖出不会变(那是当然的,因为是从仓内拿一部分出来)。
    怎样能用sql写出来是个难题。