从采购进货明细表里查询最后一次进价的SQL要怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从采购进货明细表里查询最后一次进价的SQL要怎么写相关的知识,希望对你有一定的参考价值。

不需要区分供应商,表名BMS_SU_DTL,字段有商品ID,规格,数量,进货单价,创建日期

参考技术A select top 1 * from 采购进货明细表
order by 时间 desc追问

提示没有找到FROM的关键字

追答

你是怎么写的,把语句发上来看一下。

追问

select *
from (select goodsid,recskdate,unitprice,sudocid,sudocdtlid from bms_su_dtl )
我把数量取消掉了,增加了总单id和细单id,创建日期改成了记账日期
我是新手在学习阶段,所以不懂怎么样写。对于SQL的理解还不够。

追答select * 
from (select goodsid,recskdate,unitprice,sudocid,sudocdtlid  from bms_su_dtl ) A
--在最后加一个字符 如 A ,表示查询的别名,如果查询没有别名,会有语法错误

追问

我现在查询出来的结果,是所有的进货数据,而不是每个商品的最后一次进价数据,这个要怎么写?那个top1 要怎么运用。还请教下。

追答select * 
from bms_su_dtl B,
( select goodsid,max(recskdate) recskdate
  from bms_su_dtl
  group by goodsid ) A
where A.goodsid = B.goodsid and A.recskdate = B.recskdate


由于不知道你的表结构,不知道你的表中,可以根据什么字段判断是最后一笔数据,

所以假设是 recskdate,你换成可以判断的字段应该就可以了。

追问

非常谢谢你,但是那样得出来的数据,还有很多的字段是我不需要看的,select * 

from 

( select goodsid,max(RECSKDATE) RECSKDATE

  from bms_su_dtl

  group by goodsid  ) 

我把你写的改成了这样,基本得到我想要的,

但是没有单价unitprice,我不知道该怎么加

追答

select B.goodsid,B.recskdate,B.unitprice
--此处不写*,写成你想要的字段名
from bms_su_dtl B,
( select goodsid,max(recskdate) recskdate
from bms_su_dtl
group by goodsid ) A
where A.goodsid = B.goodsid and A.recskdate = B.recskdate

本回答被提问者和网友采纳

044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)

我们上上一篇文章(042医疗项目-模块四:采购单模块—采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块—采购单明细添加查询,并且把数据添加到数据库中这里没有写采购量,我们这篇文章做的就是把采购量写进入,也就是Updata之前的那个记录。这样采购单里面的记录就完整了。

 

如下:

Dao层:用的是逆向工程生成的:yycgdmxMapper.updateByPrimaryKeySelective(yycgdmx_update);

 

Serivce层:

/**
 * 保存采购单
 */
    @Override
    public void updateYycgdmx(String yycgdid, String ypxxid, Integer cgl)
            throws Exception {

        

        String businessyear = yycgdid.substring(0, 4);

        // 根据采购单id和药品id获取采购单明细记录
        Yycgdmx yycgdmx = this.findYycgdmxByYycgdidAndYpxxid(yycgdid, ypxxid);
        if (yycgdmx == null) {
            // 抛出异常,找不到采购药品记录
            // ....
        }
        // 校验采购量
        if (cgl == null || cgl <= 0) {
            // 请输入大于0的数值
            // ..
        }

        // 计算采购金额
        Float jyjg = yycgdmx.getJyjg();
        // 采购金额
        Float cgje = jyjg * cgl;

        // 定义一个更新对象
        Yycgdmx yycgdmx_update = new Yycgdmx();
        yycgdmx_update.setId(yycgdmx.getId());
        yycgdmx_update.setCgl(cgl);
        yycgdmx_update.setCgje(cgje);
        // 设置年份
        yycgdmx_update.setBusinessyear(businessyear);
        yycgdmxMapper.updateByPrimaryKeySelective(yycgdmx_update);
        
    }

 

Action层:

// 采购单药品保存
@RequestMapping("/savecgl")
public @ResponseBody
SubmitResultInfo savecgl(String id,// 采购单id
        YycgdQueryVo yycgdQueryVo, int[] indexs // 页面选择序号
) throws Exception {

    // 页面提交的业务数据(多个),要处理的业务数据,页面中传入的参数
    List<YycgdmxCustom> list = yycgdQueryVo.getYycgdmxCustoms();

    // 处理数据的总数
    int count = indexs.length;
    // 处理成功的数量
    int count_success = 0;
    // 处理失败的数量
    int count_error = 0;

    // 处理失败的原因
    List<ResultInfo> msgs_error = new ArrayList<ResultInfo>();

    for (int i = 0; i < count; i++) {

        ResultInfo resultInfo = null;

        // 根据选中行的序号获取要处理的业务数据(单个)
        YycgdmxCustom yycgdmxCustom = list.get(indexs[i]);
        String ypxxid = yycgdmxCustom.getYpxxid();// 药品信息id
        Integer cgl = yycgdmxCustom.getCgl();// 采购量

        try {
            yycdgService.updateYycgdmx(id, ypxxid, cgl);
        } catch (Exception e) {
            e.printStackTrace();

            // 进行异常解析
            if (e instanceof ExceptionResultInfo) {
                resultInfo = ((ExceptionResultInfo) e).getResultInfo();
            } else {
                // 构造未知错误异常
                resultInfo = ResultUtil.createFail(Config.MESSAGE, 900,
                        null);
            }

        }
        if (resultInfo == null) {
            // 说明成功
            count_success++;
        } else {
            count_error++;
            // 记录失败原因
            msgs_error.add(resultInfo);
        }

    }

    // 提示用户成功数量、失败数量、失败原因
    // 改成返回详细信息
    return ResultUtil.createSubmitResult(
            ResultUtil.createSuccess(Config.MESSAGE, 907, new Object[] {
                    count_success, count_error }), msgs_error);
}

    

 

页面:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="/WEB-INF/jsp/base/tag.jsp"%>
<html> 
<head>
<title>采购单修改</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">

<%@ include file="/WEB-INF/jsp/base/common_css.jsp"%>
<%@ include file="/WEB-INF/jsp/base/common_js.jsp"%>

<script type="text/javascript">
//采购单保存
function yycgdsave(){
    //由form被多个功能公用,每次操作设置form的url
    $("#yycgdsaveForm").attr("action","${baseurl}cgd/editcgdsubmit.action");
    jquerySubByFId(\'yycgdsaveForm\', yycgdsave_callback, null);
}

function yycgdsave_callback(data) {
    var result = getCallbackData(data);
    _alert(result);
}


//采购单提交
function yycgdsubmit(){
    _confirm(\'提交后采购单将不允许修改,是否继续?\',null,
              function(){
        $("#yycgdsaveForm").attr("action","${baseurl}cgd/submitYycgd.action");
        jquerySubByFId(\'yycgdsaveForm\', yycgdsubmit_callback, null);
     }
   );
    
}
//采购单提交回调
function yycgdsubmit_callback(data) {
    var result = getCallbackData(data);
    _alert(result);
    //提交成功再刷新本页面,提交按钮就不显示
    if(result.type==TYPE_RESULT_SUCCESS){
        //重新再次跳转到修改页面,页面上的提交按钮、添加、删除的控制就不显示了。
        window.location="${baseurl}cgd/editcgd.action?id=${yycgd.id}";
    }
    
}

//采购单明细列表的工具栏
//采购药品添加
function yycgdmxaddshow(){
    var sendUrl="${baseurl}cgd/queryaddyycgdmx.action?yycgdid=${yycgd.id}";
    createmodalwindow("采购药品添加", 1124, 500, sendUrl);
}
//采购药品删除
function yycgdmxdelete(){
    _confirm(\'您确定要删除选择的采购药品吗?\',null,
              function(){
                        
                var indexs = [];//选择记录的序号
                var rows = $(\'#yycgdmxlist\').datagrid(\'getSelections\');
                for(var i=0;i<rows.length;i++){
                    var index=$(\'#yycgdmxlist\').datagrid(\'getRowIndex\',rows[i]);
                    indexs.push(index);
                }
                if(rows.length>0){
                    $("#indexs").val(indexs.join(\',\'));
                    //由于删除和保存对同一个form进行操作,所以这里给yycgdmxForm的action重新赋值
                    $("#yycgdmxForm").attr("action",\'${baseurl}cgd/yycgdmxdelsubmit.action\');
                    jquerySubByFId(\'yycgdmxForm\', yycgdmxdelete_callback, null);
                }else{
                    alert_warn("请选择要删除的采购药品");
                }
              }
            )
}
function yycgdmxdelete_callback(data) {
    var result = getCallbackData(data);
    _alert(result);
    yycgdmxquery();
}
//保存采购药品信息
function yycgdmxsave(){
    _confirm(\'您确定要保存选择的采购药品吗?\',null,
              function(){
                        
                var indexs = [];//选择记录的序号
                var rows = $(\'#yycgdmxlist\').datagrid(\'getSelections\');
                for(var i=0;i<rows.length;i++){
                    var index=$(\'#yycgdmxlist\').datagrid(\'getRowIndex\',rows[i]);
                    indexs.push(index);
                }
                if(rows.length>0){
                    $("#indexs").val(indexs.join(\',\'));
                    //由于保存和删除对同一个form进行操作,所以这里给yycgdmxForm的action重新赋值
                    $("#yycgdmxForm").attr("action",\'${baseurl}cgd/savecgl.action\');
                    jquerySubByFId(\'yycgdmxForm\',yycgdmxsave_callback, null);
                }else{
                    alert_warn("请选择要保存的采购药品");
                }
              }
            )
}
function yycgdmxsave_callback(data){
    var result = getCallbackData(data);
    _alert(result);
    yycgdmxquery();
}
var toolbar=[];
//如果采购单未提交或审核不通过显示此下操作按钮

toolbar = [{
    id : \'yycgdmxaddshow\',
    text : \'采购药品添加\',
    iconCls : \'icon-add\',
    handler : yycgdmxaddshow
    }
    ,{
        id : \'yycgdmxdelete\',
        text : \'采购药品删除\',
        iconCls : \'icon-add\',
        handler : yycgdmxdelete
    }
    ,{
        id : \'yycgdmxsave\',
        text : \'保存采购药品信息\',
        iconCls : \'icon-add\',
        handler : yycgdmxsave
    }
    ];

//采购单明细列表的列定义

var columns = [ [{
    checkbox:true
},{
    field : \'useryymc\',
    title : \'医院\',
    width : 100 /* ,
    formatter:function (value,row,index){
        //如果从json中取不出useryymc则显示成总计两个字
        if(value){
            return value;
        }else{
            return "总计";
        }
    }   */
},{
    field : \'id\',
    hidden : true,
    formatter: function(value,row,index){
        if(value){//因为有总计行,而总计行中id的值为null,所以这里需要添加判断,不为空则生成hidden
            return \'<input type="hidden" name="yycgdmxCustoms[\'+index+\'].ypxxid" value="\'+value+\'" />\';
        }
        
    }
},{ 
    field : \'bm\',
    title : \'流水号\',
    width : 50
    
},{
    field : \'mc\',
    title : \'通用名\',
    width : 100
},{
    field : \'jx\',
    title : \'剂型\',
    width : 70
},{
    field : \'gg\',
    title : \'规格\',
    width : 70
},{
    field : \'zhxs\',
    title : \'转换系数\',
    width : 50
},{
    field : \'zbjg\',
    title : \'中标价\',
    width : 50
},{
    field : \'jyztmc\',
    title : \'交易状态\',
    width : 50
},{
    field : \'jyjg\',
    title : \'交易价\',
    width : 50
},{
    field : \'cgl\',
    title : \'采购量\',
    width : 50,
    formatter:function(value,row,index){
        /* if(row.ypxxid){//如果有药品信息id表示不是总计行
            return \'<input type="text" name="yycgdmxs[\'+index+\'].cgl" value="\'+(value?value:"")+\'" />\';
        }else{
            return value;
        } */
        return \'<input type="text" name="yycgdmxCustoms[\'+index+\'].cgl" value="\'+(value?value:"")+\'" />\';  
    }
},{
    field : \'cgje\',
    title : \'采购金额\',
    width : 50
},{
    field : \'scqymc\',
    title : \'生产企业\',
    width : 100
},{
    field : \'spmc\',
    title : \'商品名称\',
    width : 100
},{
    field : \'cgztmc\',
    title : \'采购状态\',
    width : 80
},{
    field : \'usergysmc\',
    title : \'供货商\',
    width : 100
}]];

//加载datagrid(采购单明细列表)
     $(function() {
        $(\'#yycgdmxlist\').datagrid({
            title : \'采购药品列表\',
            showFooter:true,//是否显示总计行
            striped : true,
            url : \'${baseurl}cgd/queryYycgdmx_result.action\',//这里边后边带了一个参数,所以form中不需要此参数yycgdid
            queryParams:{//url的参数,初始加载datagrid时使用的参数
                id:\'${yycgd.id}\'//yycg.did是参数名称,如果参数名称中间有点,将参数用单引号括起来
            }, 
            idField : \'yycgdmxid\',//采购药品明细id
            //frozenColumns : frozenColumns,
            columns : columns,
            pagination : true,
            rownumbers : true,
            showFooter:true,//显示总计
            toolbar : toolbar,
            loadMsg:"",
            pageList:[15,30,50,100]
            } );
    }); 

//采购药品明细查询方法
function yycgdmxquery(){
    var formdata = $("#yycgdmxForm").serializeJson();
    //alert(formdata);
    $(\'#yycgdmxlist\').datagrid(\'unselectAll\');//取所有选中,避免重新load保留选中状态
    $(\'#yycgdmxlist\').datagrid(\'load\', formdata);
}
</script>
</HEAD>
<BODY>
<!-- 采购单主信息保存form -->
<form id="yycgdsaveForm" name="yycgdsaveForm" action="${baseurl}cgd/yycgdeditsubmit.action" method="post">
<input type="hidden" name="id" value="${yycgd.id}"/>
<TABLE border=0 cellSpacing=0 cellPadding=0 width="70%" bgColor=#c4d8ed align=center>
        <TBODY>
            <TR>
                <TD background=images/r_0.gif width="100%">
                    <TABLE cellSpacing=0 cellPadding=0 width="100%">
                        <TBODY>
                            <TR>
                                <TD>&nbsp;药品采购单</TD>
                                <TD align=right>&nbsp;</TD>
                            </TR>
                        </TBODY>
                    </TABLE>
                </TD>
            </TR>
            <TR>
                <TD>
                    <TABLE class="toptable grid" border=1 cellSpacing=1 cellPadding=4
                        align=center>
                        <TBODY>
                            
                            <TR>
                                <TD height=30 width="15%" align=right>采购单编号:</TD>
                                <TD class=category width="35%">
                                ${yycgd.bm}
                                </TD>
                                <TD height=30 width="15%" align=right >采购单名称:</TD>
                                <TD class=category width="35%">
                                <div>
                                <input type="text" id="yycgd_mc" name="yycgdCustom.mc" value="${yycgd.mc}"  style="width:260px" />

                                </div>
                                <div id="yycgd_mcTip"></div>
                                </TD>
                            </TR>
                            <TR>
                               <TD height=30 width="15%" align=right >建单时间:</TD>
                                <TD class=category width="35%">
                                    <fmt:formatDate value="${yycgd.cjtime}" pattern="yyyy-MM-dd"/>
                                </TD>
                                <TD height=30 width="15%" align=right >提交时间:</TD>
                                <TD class=category width="35%">
                                <fmt:formatDate value="${yycgd.tjtime}" pattern="yyyy-MM-dd"/>
                                </TD>
                                
                            </TR>
                            <TR>
                                <TD height=30 width="15%" align=right>联系人:</TD>
                                <TD class=category width="35%">
                                <input type="text" name="yycgdCustom.lxr" id="yycgd.lxr" value="${yycgd.lxr}"  style="width:260px" />
                                </TD>
                                <TD height=30 width="15%" align=right >联系电话:</TD>
                                <TD class=category width="35%">
                                <input type="text" name="yycgdCustom.lxdh" id="yycgd.lxdh" value="${yycgd.lxdh}"  style="width:260px" />
                                </TD>
                            </TR>
                            <TR>
                                <TD height=30 width="15%" align=right>采购单状态:</TD>
                                <TD class=category width="35%">
                                ${yycgd.yycgdztmc}
                                </TD>
                                <TD height=30 width="15%" align=right>备注:</TD>
                                <TD colspan=3>
                                    <textarea rows="2" cols="30" name="yycgdCustom.bz">${yycgd.bz}</textarea>
                                </TD>
                            </TR>
                            
                            <TR>
                                <TD height=30 width="15%" align=right>审核时间:</TD>
                                <TD class=category width="35%">
                                <fmt:formatDate value="${yycgd.shtime}" pattern="yyyy-MM-dd"/>
                                </TD>
                                <TD height=30 width="15%" align=right >审核意见:</TD>
                                <TD class=category width="35%">
                                ${yycgd.shyj}
                                </TD>
                            </TR>
                            
                            <tr>
                              <td colspan=4 align=center class=category>
                                <a  href="#" onclick="yycgdsave()" class="easyui-linkbutton" iconCls=\'icon-save\'>保存</a>
                                <!-- 采购单状态为1:未提交、或、4:审核不通过显示提交 -->
                                <c:if test="${yycgd.zt ==\'1\' or yycgd.zt==\'4\'}">
                                     <a  href="#" onclick="yycgdsubmit()" class="easyui-linkbutton" iconCls=\'icon-save\'>提交</a>
                                </c:if>
                              </td>
                            </tr>
                        </TBODY>
                    </TABLE>
                </TD>
            </TR>
        </TBODY>
    </TABLE>
</form>
<!-- 采购单主信息保存form -->

<!-- 采购单明细信息 -->
<TABLE border=0 cellSpacing=0 cellPadding=0 width="100%" bgColor=#c4d8ed>
        <TBODY>
            <TR>
                <TD background=images/r_0.gif width="100%">
                    <TABLE cellSpacing=0 cellPadding=0 width="100%">
                        <TBODY>
                            <TR>
                                <TD>&nbsp;采购药品列表</TD>
                                <TD align=right>&nbsp;</TD>
                            </TR>
                        </TBODY>
                    </TABLE>
                </TD>
            </TR>
        </TBODY>
    </TABLE>
    
    
    <!-- 采购单明细查询form -->
    <form id="yycgdmxForm" name="yycgdmxForm" method="post" >
    <input type="hidden" name="indexs" id="indexs" />
    <!-- 采购单id -->
    <input type="hidden" name="id" value="${yycgd.id}"/>
            <TABLE  class="table_search">
                <TBODY>
                    <TR>
                        
                        <TD class="left">通用名:</td>
                        <td><INPUT type="text"  name="ypxxCustom.mc" /></TD>
                        <TD class="left">剂型:</TD>
                        <td ><INPUT type="text" name="ypxxCustom.jx" /></td>
                        <TD class="left">规格:</TD>
                        <td ><INPUT type="text" name="ypxxCustom.gg" /></td>
                        <TD class="left">转换系数:</TD>
                        <td ><INPUT type="text" name="ypxxCustom.zhxs" /></td>
                    </TR>
                    <TR>
                        <TD class="left">流水号:</TD>
                        <td ><INPUT type="text" name="ypxxCustom.bm" /></td>
                        <TD class="left">生产企业:</TD>
                        <td ><INPUT type="text" name="ypxxCustom.scqymc" /></td>
                        <TD class="left">商品名称:</TD>
                        <td ><INPUT type="text" name="ypxxCustom.spmc" /></td>
                         <td class="left">价格范围:</td>
                          <td>
                              <INPUT id="ypxxCustom.zbjglower" name="ypxxCustom.zbjglower" style="width:70px"/><INPUT id="ypxxCustom.zbjgupper" name="ypxxCustom.zbjgupper" style="width:70px"/>
                            
                          </td>
                    </tr>
                    <tr>
                      
                        <TD class="left">药品类别:</TD>
                        <td >
                            <!-- 药品类别从数据字典中取id作为页面传入action的value -->
                            <select id="ypxxCustom.lb" name="ypxxCustom.lb" style="width:150px">
                                <option value="">全部</option>
                                <c:forEach items="${lblist}" var="value">
                                    <option value="${value.id}">${value.info}</option>
                                </c:forEach>
                            </select>
                        </td>
                        <TD class="left">交易状态:</TD>
                        <td >
                            <!-- 交易状态从数据字典中取出dictcode作为页面传入action的value -->
                            <select id="ypxxCustom.jyzt" name="ypxxCustom.jyzt" style="width:150px">
                                <option value="">全部</option>
                                <c:forEach items="${jyztlist}" var="value">
                                    <option value="${value.dictcode}">${value.info}</option>
                                </c:forEach>
                            </select>
                            
                        </td>
                        <TD class="left">采购状态:</TD>
                        <td >
                           
                            <select id="yycgdmxCustom.cgzt" name="yycgdmxCustom.cgzt" style="width:150px">
                                <option value="">全部</option>
                                <c:forEach items="${cgztlist}" var="value">
                                    <option value="${value.dictcode}">${value.info}</option>
                                </c:forEach>
                            </select>
                            
                        </td>
                         

                          <td colspan=2>
                          
                        <a id="btn" href="#" onclick="yycgdmxquery()" class="easyui-linkbutton" iconCls=\'icon-search\'>查询</a>
                          </td>
                        
                    </TR>
                    
                </TBODY>
            </TABLE>
       
       <!-- 采购明细列表 -->
        <TABLE border=0 cellSpacing=0 cellPadding=0 width="99%" align=center>
            <TBODY>
                <TR>
                    <TD>
                    <!-- 采购单明细列表 -->
                        <table id="yycgdmxlist"></table>
                    </TD>
                </TR>
            </TBODY>
        </TABLE>
    </form>



</BODY>
</HTML>
 return \'<input type="hidden" name="yycgdmxCustoms[\'+index+\'].ypxxid" value="\'+value+\'" />\';
  return \'<input type="text" name="yycgdmxCustoms[\'+index+\'].cgl" value="\'+(value?value:"")+\'" />\';  

当表单提交时,会把ypxxid,.cgl这两个值传到后台。后台根据ypxxid updata更新数据库。
 这里涉及到了批量提交,批量提交的方法是把当前页的所有数据都传到后台,同时把选中的编号也传到后台,遍历所有的数据,把编号里面的数据取出来。处理!

 

以上是关于从采购进货明细表里查询最后一次进价的SQL要怎么写的主要内容,如果未能解决你的问题,请参考以下文章

SQL从弱采购明细表中获取产品的最后采购价格

怎样在金蝶K3里查询某一家公司的业务往来

042医疗项目-模块四:采购单模块—采购单明细添加查询,并且把数据添加到数据库中

SQL Server 数据库课程设计某书店图书进货、销售管理系统(Myeclipse和mysql)

SQL查询结果替换???????

关于sap里取采购订单里的物料单价的FS怎么写?