从采购进货明细表里查询最后一次进价的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的理解还不够。
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> 药品采购单</TD> <TD align=right> </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> 采购药品列表</TD> <TD align=right> </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要怎么写的主要内容,如果未能解决你的问题,请参考以下文章
042医疗项目-模块四:采购单模块—采购单明细添加查询,并且把数据添加到数据库中