首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个项目中的有关问题,大家帮小弟我想想

2012-04-27 
一个项目中的问题,大家帮我想想这是一个从仓库取出商品的情景:有一个库存表,每条记录对应一次进货。现在要

一个项目中的问题,大家帮我想想
这是一个从仓库取出商品的情景:

有一个库存表,每条记录对应一次进货。现在要卖一种商品A,系统就从库存表搜索出所有A商品的进货记录。比如结果是


Java code
id  商品名称  库存数量      进货日期1      A        100       2001年9月7日4      A        57        2008年12月5日


现在系统让人选择从哪批中取,我想让他达到自动选择的效果:

优先选最早的进货批次,如果单个批次数量不够那么就组合多个批次,直到够用。

请问这个功能能不能通过一条或几条sql语句完成?或者需要java计算一下再决定?

请大家提供个思路就好~~非常感谢

[解决办法]
我觉得在java中实现比较简单吧
先查处最早的进货批次的库存,与需要的量比较下,不行的话 再查一个,知道大于需要的量
[解决办法]
我感觉sql不好写,还是用java控制吧!!
[解决办法]
用java吧,
先按日期sql取出所有数据,
写个for循环 从最早的一批商品开始,当单个批次不够就累计叠加到下一条数据,累计下一条时候,可以sql假删除这条数据 直到满足数量为止,当最后一批有剩余时,update本条数据为剩余量。只是个大概思路不知道行不行
[解决办法]
不知道你是什么数据库,假设为MySQL吧:
SQL code
Select * From (  Select @sumamount:=@sumamount+amount sumamount, @tmpid:=@tmpid+1 tmpid, name, amount, indate  From (    SELECT @sumamount:=0, @tmpid:=0, name, amount, indate     From product     Where name='A'    Order By indate      ) tmp1) a, -- 这个子句是查出所有的,然后靠b子句来过滤掉超出部分(  Select tmpid  From (    Select @sumamount:=@sumamount+amount sumamount, @tmpid:=@tmpid+1 tmpid, name, amount, indate    From (      SELECT @sumamount:=0, @tmpid:=0, name, amount, indate       From product       Where name='A'      Order By indate        ) tmp2  ) main  Where sumamount>=40  Limit 1) b --这个子句主要是为了得到刚好能满足汇总amount的rownum值Where a.tmpid <= b.tmpid
[解决办法]
查找所有为A的ID存放到数组arr里 然后对数组arr里所有的ID进行select查找记录显示到表里
[解决办法]
这样直接写个存储过程解决比较好
[解决办法]
找到了
select id, 商品名称, 进货日期, 库存数量, sum(库存数量) over (order by 进货日期 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as 累计数量和 from 表



[解决办法]
探讨
找到了
select id, 商品名称, 进货日期, 库存数量, sum(库存数量) over (order by 进货日期 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as 累计数量和 from 表

[解决办法]
探讨
select min(rn1) from
(select rownum rn1,kc1.indate from kc kc1 where kc1.name='A')
where
(select sum(num) from kc kc3 where rownum<=rn1)>=70 order by indate;

热点排行