日期:2014-05-17  浏览次数:20457 次

遇到一个比较麻烦的先进先出问题
出库表

PID   Num  pDate       expDte
001   2   1900-01-01  1900-01-01
001   32  1900-01-01  2017-01-01
001   4   2011-01-01  1900-01-01
001   50  2012-01-01  2017-01-01 

PID---商品ID,Num---数量,pDate---生产日期,expDate---到期日期
某些商品在输入的时候,操作者可能只输入生产日期或者到期日期在其中一项
操作者没有输入日期的,系统自动给成1900年,下同。

库存表

PID  Num  pDate       expDate    InDate
001  1   1900-01-01  1900-01-01  2013-01-01
001  2   1900-01-01  1900-01-01  2013-02-01
001  1   1900-01-01  1900-01-01  2013-03-01
001  70  1900-01-01  2017-01-01  2013-06-02
001  10  2011-01-01  1900-01-01  2013-01-03
001  20  2012-04-01  2017-01-01  2013-05-02

InDate---入库日期

从库存表里按出库表扣减库存,要求优先按生产日期,再按到期日期匹配出库。按入库日期先进先出。
结果应该是:
库存表

PID  Num  pDate       expDate    InDate
001  0   1900-01-01  1900-01-01  2013-01-01---扣出库表第一条
001  1   1900-01-01  1900-01-01  2013-02-01---扣出库表第一条
001  1   1900-01-01  1900-01-01  2013-03-01---没扣
001  0   1900-01-01  2017-01-01  2013-01-02---扣出库表第二、四条
001  0   2011-01-01  1900-01-01  2013-01-03---扣出库表第三条
001  18  2012-01-01  2017-01-01  2013-05-02---虽然生产日期不符合,但到期日期符合出库第4条



------解决方案--------------------
我的建议:
1,给表加个自增列。用自增列来排序先后。
2,查找论坛以前的帖子,先进先出的很多
------解决方案--------------------
这种计算方式,用SQL不好实现。个人认为只有用存储过程了。但分析了一下,跟楼主的意思有些出入,我觉得结果应该是:
PID  Num  pDate       expDate    InDate