求SQL高手帮忙看看一个查询问题

现在有两个实体表
表1
销售表

货号 时间 数量
A1 2016/5/10 2
A1 2016/5/9 3
A1 2016/5/8 3

表2
收货表

货号 时间 数量
A1 2016/5/7 1
A1 2016/5/6 4
A1 2016/5/5 1

现在需要查询成如下结果
查询结果表

货号 时间 销售数量 收货数量
A1 2016/5/10 2 1
A1 2016/5/9 3 3
A1 2016/5/8 3 2

查询结果的前3列就是【销售表】,第四列的【收货数据】计算规则如下
1.根据每天的销售时间往前推3天内的收货都算此日期下的收货数量
2.当收货数量大于销售数据时,收货数量等于销售数量

第一行的销售时间是2016-5-10,那么收货日期范围是2016-5-7到2016-5-9的3天,查收货表的此范围内只有2016-5-7日的1件,所以第一行的结果就是1,此时2016-5-7的收货表中就剩余为0了;
第二行的销售时间是2016-5-9,那么收货日期范围是2016-5-6到2016-5-8的3天,查收货表的此范围内有2016-5-7(剩余0件),2016-5-6日合计4件,按照规则第2天,结果为3,2015-5-6日剩余1件;
第三行依次类推合计是2016-5-6剩余的1件加上2016-5-5号的1件合计2件;

请问各位高手,如何用SQL完成上述要求,存储过程或者函数都行,实际使用的时候数据量会比较大,所有也请考虑执行效率问题,谢谢

8/9销售数量6,进货共6,用先进先出,应该先扣8/9号扣完,10号应该 显示为0才对

先进先出算法

这里给你提供个方法,你可参照一下同你的实际情况是否要套用
你限制了三天为一个单位,会造成收货时间3天前的扣不了库存