期初库存 为 搜索时间开始前最近的该物品的结余数量
图1 暂未搜索时
当勾选搜索,多出一列为期初库存
点击查询,对应期初数量发生变更,如上所述
使用mybatis进行查询
起先,建立了数据库表,其记录为单次的收入,发出变更
在进行查询时,根据sum(收入数量),sum(发出数量)来展示,并根据名称 group by
而这里的难点,当搜索时间区间内没有该物品的变更,要获取其期初库存为最近的结余数量
#获取离搜索开始时间最近的那条数据的期初库存,以及获取离搜索结束时间最近的那条数据的库存余量. #'2019-12-27 22:02:01' 为假设开始时间 select qichu.qichukucun from (select qichukucun from wuliaokucunrizhi where createtime > '2019-12-27 22:02:01' ORDER BY createtime limit 1) qichu
如果要sum收入和发出数量,首先获取到该搜索时间区间的数据元组,再进行
假如数据元组没有包含有些物品,则不满足要求,必须要进行所有库存物品的展示,以及展示其期初库存
首先能想到的是自表关联,一个表根据时间区间进行sum,另一个则group by名称,就可以进行全部物品名称,以及部分时间区间内的sum的值计算
<select id="listKucunWithRiZhi" resultMap="BaseResultMap"> select DISTINCT rizhi2.mingchengguige as mingchengguige, ifnull(rizhi1.qichukucun1,0) qichukucun, ifnull(rizhi1.shourushuliang1,0) shourushuliang, ifnull(rizhi1.fachushuliang1,0) fachushuliang, ifnull(rizhi1.tuihuishuliang1,0) tuihuishuliang, ifnull(rizhi1.jieyushuliang1,0) jieyushuliang from ( select DISTINCT (kucunrizhi.mingchengguige) as mingchengguige, substring_index(group_concat(kucunrizhi.id order by kucunrizhi.createtime desc),',',1) as id, substring_index(group_concat(kucunrizhi.xiangmuweihu order by kucunrizhi.createtime desc),',',1)as xiangmuweihu, substring_index(group_concat(kucunrizhi.rukukufang order by kucunrizhi.createtime desc),',',1)as rukukufang, substring_index(group_concat(kucunrizhi.dalei order by kucunrizhi.createtime desc),',',1)as dalei, substring_index(group_concat(kucunrizhi.qichukucun order by kucunrizhi.createtime),',',1)qichukucun1, sum(kucunrizhi.shourushuliang)as shourushuliang1, sum(kucunrizhi.fachushuliang)as fachushuliang1, sum(kucunrizhi.tuihuishuliang)as tuihuishuliang1, substring_index(group_concat(kucunrizhi.jieyushuliang order by kucunrizhi.createtime desc),',',1)jieyushuliang1, substring_index(group_concat(kucunrizhi.jiagongyigong order by kucunrizhi.createtime desc),',',1)as jiagongyigong, substring_index(group_concat(kucunrizhi.createtime order by kucunrizhi.createtime desc),',',1)as createtime from wuliaokucunrizhi as kucunrizhi <where> <if test="mingchengguige != null and mingchengguige != '' "> <bind name="mingchengguigePattern" value="'%'+mingchengguige+'%'"/> and kucunrizhi.mingchengguige like #{mingchengguigePattern} </if> <if test="jiagongyigong != null and jiagongyigong != '' "> and kucunrizhi.jiagongyigong = #{jiagongyigong} </if> <if test="rukukufang != null and rukukufang != '' "> and kucunrizhi.rukukufang = #{rukukufang} </if> <if test="xiangmuweihu != null and xiangmuweihu != ''"> and kucunrizhi.xiangmuweihu = #{xiangmuweihu} </if> <if test="dalei != null and dalei != '' "> and kucunrizhi.dalei = #{dalei} </if> <if test="s_btime != null"> and kucunrizhi.createtime >= #{s_btime} </if> <if test="s_etime != null"> and kucunrizhi.createtime <= date_add(#{s_etime}, interval 1 day) </if> <if test="createtime != null"> and kucunrizhi.createtime = #{createtime} </if> <if test="updatetime != null"> and kucunrizhi.updatetime = #{updatetime} </if> </where> GROUP BY kucunrizhi.mingchengguige <if test="sort == null"> ORDER BY createtime DESC </if> <if test="sort != null and sort != ''"> order by ${sort} ${order} </if>)rizhi1 right join wuliaokucunrizhi as rizhi2 on rizhi1.mingchengguige = rizhi2.mingchengguige </select>
然而这里并无法获取到正常的期初库存值,原因是其值获取是根据时间区间内来拿到的,如果不在时间区间,则无法返回