常用的几个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);
}
最后的效果如下所示: