有期初库存的库存查询实战

期初库存 为 搜索时间开始前最近的该物品的结余数量

图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 &gt;= #{s_btime}
            </if>
            <if test="s_etime != null">
                and kucunrizhi.createtime &lt;= 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>

 然而这里并无法获取到正常的期初库存值,原因是其值获取是根据时间区间内来拿到的,如果不在时间区间,则无法返回

猜你喜欢

转载自www.cnblogs.com/ukzq/p/12184884.html