在实际开发中我们可能会遇到取时间范围内刻度下各个刻度的数据,首先,定义刻度类型
@Data
public class RainQueryParamVo implements Serializable{//分钟public static final String BUSI_TYPE_MINUTE = "MIN";//小时public static final String BUSI_TYPE_HOUR = "H";//天public static final String BUSI_TYPE_DAY = "D";//旬public static final String BUSI_TYPE_XUN = "X";//月public static final String BUSI_TYPE_MONTH = "M";//年public static final String BUSI_TYPE_YEAR = "Y";private Date start;private Date end;//查询类型private String busiType;//分钟值:5、10、20、30...等private Integer mtph;//小时值:1、3、6、12...等private Integer tph;
}
 其次:处理时间工具类
 private Map<String, Object> setQueryRainsRainParam(RainQueryParamVo paramVo, Map<String, Object> queryParam) {Calendar caS = Calendar.getInstance();Calendar caE = Calendar.getInstance();caS.setTime(paramVo.getStart());caE.setTime(paramVo.getEnd() == null ? paramVo.getStart() : paramVo.getEnd());List<Date> stmList = new ArrayList<>();List<Date> etmList = new ArrayList<>();String busiType = paramVo.getBusiType();switch (busiType.toUpperCase()) {//按分查询case RainQueryParamVo.BUSI_TYPE_MINUTE:int minute = paramVo.getMtph(), min = 0;while (true) {Date dNewStart = DateUtil.add(paramVo.getStart(), Calendar.MINUTE, min * minute);Date dNewEnd = DateUtil.add(paramVo.getStart(), Calendar.MINUTE, minute * (min + 1));min++;if (dNewEnd.getTime() > paramVo.getEnd().getTime()) {break;}stmList.add(dNewStart);etmList.add(dNewEnd);}break;//按小时查询case RainQueryParamVo.BUSI_TYPE_HOUR:int hourStep = paramVo.getTph(), h = 0;while (true) {Date dNewStart = DateUtil.add(paramVo.getStart(), Calendar.HOUR_OF_DAY, h * hourStep);Date dNewEnd = DateUtil.add(paramVo.getStart(), Calendar.HOUR_OF_DAY, hourStep * (h + 1));h++;if (dNewEnd.getTime() > paramVo.getEnd().getTime()) {break;}stmList.add(dNewStart);etmList.add(dNewEnd);}break;//按天查询case RainQueryParamVo.BUSI_TYPE_DAY:Double intevalDay = DateUtil.getDiffForDay(caS.getTime(), caE.getTime(), true) + 1;for (int i = 0; i < intevalDay; i++) {Date dNewStart = DateUtil.add(paramVo.getStart(), Calendar.DAY_OF_MONTH, i);Calendar calStart = Calendar.getInstance();calStart.setTime(dNewStart);calStart.set(Calendar.HOUR_OF_DAY, 8);Date dNewEnd = DateUtil.add(paramVo.getStart(), Calendar.DAY_OF_MONTH, i + 1);Calendar calEnd = Calendar.getInstance();calEnd.setTime(dNewEnd);calEnd.set(Calendar.HOUR_OF_DAY, 8);stmList.add(calStart.getTime());etmList.add(calEnd.getTime());}break;//按旬查询case RainQueryParamVo.BUSI_TYPE_XUN:Double xIntervalDay = DateUtil.getDiffForDay(paramVo.getStart(), paramVo.getEnd(), true) + 1;for (int i = 0; i < xIntervalDay; i++) {if (i == 0) {stmList.add(paramVo.getStart());if (xIntervalDay == 1) {etmList.add(DateUtil.add(paramVo.getStart(), Calendar.DAY_OF_MONTH, 1));}} else if (i == xIntervalDay.intValue() - 1) {etmList.add(paramVo.getEnd());} else {Calendar current = Calendar.getInstance();current.setTime(DateUtil.add(paramVo.getStart(), Calendar.DAY_OF_MONTH, i));int currentDate = current.get(Calendar.DAY_OF_MONTH);if (currentDate == 1) {etmList.add(current.getTime());stmList.add(current.getTime());} else if (currentDate == 10) {etmList.add(current.getTime());stmList.add(current.getTime());} else if (currentDate == 20) {etmList.add(current.getTime());stmList.add(current.getTime());}}}break;//按月查询case RainQueryParamVo.BUSI_TYPE_MONTH:int intervalMonths = DateUtil.getDiffForMonth(paramVo.getStart(), paramVo.getEnd()) + 1;for (int i = 0; i < intervalMonths; i++) {Date dNewStart = DateUtil.add(paramVo.getStart(), Calendar.MONTH, i);Date dNewEnd = DateUtil.add(paramVo.getStart(), Calendar.MONTH, i + 1);stmList.add(dNewStart);etmList.add(dNewEnd);}break;default:break;}queryParam.put("stmList", stmList);queryParam.put("etmList", etmList);queryParam.put("stm", paramVo.getStart());queryParam.put("etm", etmList.size() == 0 ? paramVo.getEnd() : etmList.get(etmList.size() - 1));return queryParam;}
 最后在执行sql查询
    <select id="query" resultType="com.alibaba.fastjson.JSONObject">select * from( select tabel.name, <foreach collection="params.stmList" item="item" index="index">(select sum(字段) from table t1 where t1.字段= tt.字段 and tm > #{item} and tm <![CDATA[ <=  ]]>#{params.etmList[${index}]}) as new${index},</foreach>(select sum (字段) from table t1  pptn where t1.字段= tt.字段 and tm > #{params.start} and tm <![CDATA[ <= ]]>#{params.end}) as totalfrom table tt)t </select>

时间范围内按某个刻度取各个刻度间的数据相关推荐

  1. 坐标轴刻度取值算法-基于魔数数组-源于echarts的y轴刻度计算需求

    数值型坐标轴刻度计算算法 前言 算法描述 上代码 代码运行效果 ts版本(2021/3/10补充) 结语 前言 因实习的公司是做大数据的,而我的工作刚好又是需要绘制一些数据图表的.绘制图表有许多现成的 ...

  2. [046量化交易]python 抓取指定时间范围内的股票基础信息写入Mongodb

    # -*- coding: utf-8 -*- from datetime import datetime, timedelta import tushare as ts from pymongo i ...

  3. 12.完善统计图形——调整刻度范围和刻度标签

    文章目录 1.调整刻度范围和刻度标签--xlim()和xticks() 2.逆序设置坐标轴刻度标签 刻度范围是绘图区域中坐标轴的取值区间,包括x轴和y轴的取值区间.刻度范围是否合适直接决定绘图区域中图 ...

  4. python使用matplotlib可视化:设置坐标轴的范围、设置主次坐标轴刻度、坐标轴刻度显示样式、坐标轴刻度数颜色、小数点位数、坐标轴刻度网格线、线条类型、数据点形状标签、文本字体、颜色、大小等

    python使用matplotlib可视化:设置坐标轴的范围.设置主次坐标轴刻度.坐标轴刻度显示样式.坐标轴刻度数颜色.小数点位数.坐标轴刻度网格线.线条类型.数据点形状标签.文本字体.颜色.大小等 ...

  5. pandas创建时间序列仿真数据并过滤(filter)时间数据:头尾数据、某年的数据、某年某月的数据、某年某月某日的数据、某个时间范围内的数据、truncate函数查看特定时间之前护着之后的数据

    pandas创建时间序列仿真数据并过滤(filter)时间数据:头尾数据.某年的数据.某年某月的数据.某年某月某日的数据.某个时间范围内的数据.truncate函数查看特定时间之前护着之后的数据 目录

  6. R筛选dataframe时间范围内的数据

    R筛选dataframe时间范围内的数据 目录 R筛选dataframe时间范围内的数据 两个日期之间的数据 某一日期之后的子集

  7. 网页视频15分钟自动暂停_在15分钟内学习网页爬取

    网页视频15分钟自动暂停 什么是网页抓取? (What is Web Scraping?) Web scraping, also known as web data extraction, is th ...

  8. matplotlib入门基础(五)轴坐标范围 轴刻度比例 轴刻度

    这篇文章同样以面向对象风格为主,介绍设置轴坐标范围.轴刻度比例.轴刻度(xtick,ytick)的方法. 这篇文章分以下部分来介绍: 1. 设置轴坐标范围 2. 设置轴刻度比例 3. 设置轴刻度 1. ...

  9. [MySQL] 统计图数据查询 (MySQL查询时间范围内所有日期)

    1. 需求 任何管理系统都有统计图, 像这样的: 这里需要数据: 横坐标名 纵坐标数值 案例 需求: 需要统计近七天的注册用户数量 前端需要的数据格式: [{"日期":" ...

最新文章

  1. 【Ubuntu】ubuntu工具 记录shell终端的内容到文件中:script
  2. 利用SMS OSD实现win2008操作系统的部署
  3. correlation 蒙特卡洛_蒙特卡洛模拟法及其Matlab案例
  4. 在飞音G801上运行OpenWRT+Asterisk
  5. java 抽奖 高并发处理_如何设计高并发下的抽奖?
  6. 嵌入式系统中的几个关键基本概念!
  7. apache2.4 php5.5 配置,求助,apache2.4+php5.5,配置好不能运行,错误信息如下
  8. 转帖节选:卓有成效的管理者(彼得.德鲁克)
  9. 让你了解一下世界名人blog
  10. 猿创征文|深度学习基于ResNet18网络完成图像分类
  11. matlab中gui选择一个文件,matlabgui中定义函数
  12. 复化科特斯公式matlab_牛顿科特斯公式要点分析.ppt
  13. c# SharpPcap 截包,抓包 - 资料收集贴 --转
  14. FFmpeg 在 Python 中的安装使用方法详解
  15. MySQL从删库到跑路(9):group by——给漂亮小姐姐分个组
  16. 简单介绍函数式编程中的Functor(函子),Applicative(加强版函子),Monad(单子)
  17. 高通终端修改nv值后,不重启终端即生效
  18. app跳转到app store评分界面
  19. windows远程linux的工具
  20. Python 进阶 - 元组解包

热门文章

  1. 适合小本创业的项目(适合新手创业的项目)
  2. java投票_java做投票系统
  3. “您的访问出错了”网页自动跳转贴吧404
  4. 南加大计算机科学硕士费用,南加州大学计算机科学硕士排名第15(2020年TFE Times排名)...
  5. android微信怎么建群,微信可以建群吗 图文教你微信怎么建群
  6. i春秋 WEB 象棋
  7. MySQL数据库中时间戳及时间戳的格式转换
  8. ios中图层的用法(1)
  9. 有符号数和无符号数之间的转换
  10. 从ftp、tftp自动获取文件的脚本