大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。
常用的几个sql整理
1.按照日期统计今天的客流信息。
SELECT * FROM base_disanfang
WHERE DATE_FORMAT(create_time,'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d')
其中base_disanfang
为表名,create_time
日期的字段名。
还有另外一种写法,查询速度比较快点儿。
SELECT * FROM base_disanfang WHERE DATE(create_time) = CURDATE()
2.按照日期统计本月的客流信息。
SELECT * FROM buss_flow_listWHERE DATE_FORMAT(TIME,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')
其中buss_flow_list
为表名,TIME
日期的字段名。
3.按照日期统计今年的客流信息。
SELECT * FROM base_month_flowWHERE DATE_FORMAT(TIME,'%Y') = DATE_FORMAT(NOW(),'%Y')
其中base_month_flow
为表名,TIME
日期的字段名。
4.上月低免地区的客流量
SELECT * FROM base_month_flowWHERE DATE_FORMAT(TIME,'%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH), '%Y-%m')AND state_id = 1;
其中base_month_flow
为表名,TIME
日期的字段名,state_id
区分是否为抵免地区。
这几个sql
都是对日期进行处理比较常用的,sql写好了就无需在代码中做过多的操作。
其他注意事项
1.如果数据返回的是Long
类型,则在mybatis
的配置文件中需要注意resultType
的类型为java.lang.Long
,如下:
xml文件:
<!--根据场馆编号查询当月的客流信息--><select id="getMonthsKeLiu" resultType="java.lang.Long">SELECT SUM(in_count) FROM buss_flow_listWHERE DATE_FORMAT(TIME,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')AND dept_id = #{deptId}AND state_id = #{stateId}</select>
接口:
/*** 根据场馆编号查询本月的客流量* @param deptId 场馆编号* @param stateId 是否为抵免地区,0:全部 1:低免地区* @return*/public Long getMonthsKeLiu(@Param("deptId") Long deptId,@Param("stateId") Integer stateId);
2.如果查询的返回数据未null
或者空的时候,则需要判断,代码如下:
/*** 根据场馆编号获取场馆信息* @param deptId* @return*/@GetMapping(value = "/getDeptDetails/{deptId}")public AjaxResult getDeptDetails(@PathVariable(value = "deptId", required = false) Long deptId){SysDeptVo deptVo = new SysDeptVo();//获取本日的客流量 null就是0,否则就是查出来的值Long days_all = baseDisanfangService.getDaysKeLiu(deptId)==null? 0:baseDisanfangService.getDaysKeLiu(deptId);//获取本月的客流(全部)Long months_all = bussFlowListService.getMonthsKeLiu(deptId,0)==null?0:bussFlowListService.getMonthsKeLiu(deptId,0);//获取本年的总客流(全部)--今年所有月+本月的Long years_all =(baseMonthFlowService.getYearsKeLiu(deptId,0)==null?0:baseMonthFlowService.getYearsKeLiu(deptId,0))+months_all;//获取总客流(全部的)--所有月的加上本月的Long total_all = (baseMonthFlowService.getTotalKeLiu(deptId,0)==null?0:baseMonthFlowService.getTotalKeLiu(deptId,0))+months_all;//获取上月低免客流Long top_month_dimian = baseMonthFlowService.getTopMonthDiMianKeLiu(deptId,1)==null?0:baseMonthFlowService.getTopMonthDiMianKeLiu(deptId,1);//获取本月的低免客流Long month_dimian = bussFlowListService.getMonthsKeLiu(deptId,1)==null?0:bussFlowListService.getMonthsKeLiu(deptId,1);//获取本年的低免客流---所有月的加上本月的Long year_dimian =(baseMonthFlowService.getYearsKeLiu(deptId,0)==null?0:baseMonthFlowService.getYearsKeLiu(deptId,0))+month_dimian;//获取低免的总客流---所有月的加上本月的Long total_dimian = (baseMonthFlowService.getTotalKeLiu(deptId,1)==null?0:baseMonthFlowService.getTotalKeLiu(deptId,1))+month_dimian;//都放在VO里面//获取场馆对象deptVo.setSysDept(deptService.selectDeptById(deptId));deptVo.setDaysKeLiu(days_all);deptVo.setMonthKeLiu(months_all);deptVo.setYearKeLiu(years_all);deptVo.setTotalKeLiu(total_all);deptVo.setTopMonthDiMianKeLiu(top_month_dimian);deptVo.setYearDiMianKeLiu(year_dimian);deptVo.setTotalDiMianKeLiu(total_dimian);return AjaxResult.success(deptVo);}
最后的效果如下所示: