常用的几个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_list WHERE DATE_FORMAT(TIME,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m')
其中buss_flow_list
为表名,TIME
日期的字段名。
3.按照日期统计今年的客流信息。
SELECT * FROM base_month_flow WHERE DATE_FORMAT(TIME,'%Y') = DATE_FORMAT(NOW(),'%Y')
其中base_month_flow
为表名,TIME
日期的字段名。
4.上月低免地区的客流量
SELECT * FROM base_month_flow WHERE 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_list WHERE 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); }
最后的效果如下所示:
image-20211031193633028