需求如下~

输入年份,表格第一行 1-12 月

输入年份和月份  表格第一行 1--31  具体天数

表格第二行就是统计数量,没有补0.

看完首先想到MYSQL查询出连续一段时间和数量,没有 就为0.

好像这样

但是  做法 需要新建一个时间表 ,那个时间表里面的数据一定要事先生成,生成个几十年就够用了。再和查数据表连接。

可参考  http://www.cnblogs.com/LUA123/p/6155414.html

下面选择用Java后台处理整个需求,不用MYSQL。

查出有数据的时间 和 数量不难,要点是 按 连续月份  和日 排列 。

查出有数据的时间和数量 放入Map

Date start =ToolDateTime.parse(nf + "-" + yf + "-01",ToolDateTime.pattern_ymd);
Date end =ToolDateTime.parse(nf + "-" + (Integer.valueOf(yf)+1) + "-00",ToolDateTime.pattern_ymd);

查出 连续时间段  。

遍历连续时间段,通过(map)判断下,   有数量  就 set 数量 进一个对象,没有就 把这个对象 数量位置为0。 对象另一个属性不是查出来的

时间,是如图第一行。

挨个 添加进List。后台Java是

public void sumDays () {

        String nf = getPara("tjnf");
String yf = getPara("tjyf");
List<Record> jyrslist = JyrstjService.service.findjyrstj(nf,yf); //有数据的时间段和数量 Map<String, Record> jymap = new HashMap<>(); for (Record record : jyrslist) {
jymap.put(record.getStr("sj"), record);
} List<Record> jylist = new ArrayList<>();
int total = 0; if ( !"".equals(yf) && yf != null && !"".equals(nf) && nf != null) {
try {
Date start =ToolDateTime.parse(nf + "-" + yf + "-01",ToolDateTime.pattern_ymd);
Date end =ToolDateTime.parse(nf + "-" + (Integer.valueOf(yf)+1) + "-00",ToolDateTime.pattern_ymd); List<String> daySpaceDate = ToolDateTime.getDaySpaceDate(start, end); //连续的时间段 for (String day : daySpaceDate) {
Record record = new Record();
Date date = ToolDateTime.parse(day,ToolDateTime.pattern_ymd);
record.set("sj", date.getDate()); //把连续时间段变成对象属性 1-30 天数 if ( jymap.containsKey(day)) { // 有数量  就 set 数量 进一个对象
String sum = jymap.get(day).get("sum").toString();
total += Integer.valueOf(sum); //合计,与重点无关
record.set("sum", sum);
}else {
record.set("sum", 0);
} jylist.add(record);
}
} catch (Exception e) { } }else if ( !"".equals(nf) && nf != null ) { for (int i = 0; i < 12; i++) { String day = nf + "-" + (i < 10 ? "0" : "") + (i+1); Record record = new Record();
Date date = ToolDateTime.parse(day + "-01",ToolDateTime.pattern_ymd);
record.set("sj", (date.getMonth()+1) ); //某年的连续月份处理 if ( jymap.containsKey(day)) {
String sum = jymap.get(day).get("sum").toString();
total += Integer.valueOf(sum);
record.set("sum", jymap.get(day).get("sum"));
}else {
record.set("sum", 0);
} jylist.add(record); } } setAttr("total", total);
setAttr("jylist", jylist); render("/platform/xxgl/jyrstj/content.html");
}

sql语句 mysql 这样:

 select
count(1) sum,
date_format(lswczl.WCSJ,
'%Y-%m-%d') sj
from
表 lswczl
where
date_format(lswczl.WCSJ,'%Y-%m') = '2018-11'
group by
date_format(lswczl.WCSJ,
'%Y-%m-%d')

分时间段(年份或月份)统计,没有数字补0 Java(替代 MYSQL) 做法的更多相关文章

  1. [PHP学习教程 - 数字]001.数字补0(Num padding)

    引言:在日常工作中,经常要用到数字前后补0的操作,如:日期格式yyyy-MM-dd等等. 在php中有多种前后填充函数——今天,我们就介绍常用的两种,实现数字补零: str_pad sprintf 大 ...

  2. python 中str format 格式化数字补0方法

      >>> "{0:03d}".format(1)'001'>>> "{0:03d}".format(10)'010'> ...

  3. PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法

    一.数字补0. 如果要自动生成学号,自动生成某某编号,就像这样的形式“d0000009”.“d0000027”时,那么就会面临一个问题,怎么把左边用0补齐成这样8位数的编码呢?我想到了两种方法实现这个 ...

  4. SQL语句更新时间字段的年份、月份、天数、时、分、秒

    SQL语句更新时间字段的年份.月份.天数.时.分.秒 --修改d表日期字段的年份update dset birth=STUFF(convert(nvarchar(23),birth,120),1,4, ...

  5. js中获得当前时间是年份和月份

    js中获得当前时间是年份和月份,形如:201208       //获取完整的日期 var date=new Date; var year=date.getFullYear();  var month ...

  6. oracle 行转列,动态年份,月份列。已解决!

    -----------------存储过程包体----------- procedure GetComparativeAnalysisTB(p_StartTime varchar2, ----开始时间 ...

  7. sql生成连续日期(年份、月份、日期)

    此随笔主在分享日常可能用到的sql函数,用于生成连续日期(年份.月份.日期) 具体的看代码及效果吧! -- ============================================= ...

  8. oracle 根据一个时间段获取这个时间段内所有月份、天数、日期

    注:本文来源于< oracle 根据一个时间段获取这个时间段内所有月份.天数.日期 > 获取月份列表: SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10 ...

  9. Calendar获取当前年份、月份、日期

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Te ...

  10. java获取当前年份、月份和日期字符串等

    Java获取当前年份.月份和日期是通过Calendar类的实例对象来获取的. 首先创建一个Calendar类的实例对象,Calendar类属于java.util包. Calendar calendar ...

随机推荐

  1. dify升级,PostgreSQL数据库字段更新处理

    一.概述 dify运行在容器中,PostgreSQL用的是阿里云,已经运行了很长一段时间.某些表的数据量很大,比如workflowruns表,就有100GB.这个主要是,详细记录了工作流的执行情况,包 ...

  2. AI可解释性 II | Saliency Maps-based 归因方法(Attribution)论文导读(持续更新)

    AI可解释性 II | Saliency Maps-based 归因方法(Attribution)论文导读(持续更新) 导言 本文作为AI可解释性系列的第二部分,旨在以汉语整理并阅读归因方法(Attr ...

  3. 查缺补漏——01-BFS

    01bfs 解决的是一类特殊的最段路问题. 在学习它的过程中,我更加深刻地学习到了泛化路径和 bfs. 01-BFS 是什么 首先明确,01-BFS 是一种图论算法.它解决的事最短路径问题.最短路径算 ...

  4. H5 ios端底部安全距离CSS

    html 头部添加 <meta name="viewport" content="width=device-width, initial-scale=1.0,min ...

  5. 深度讲解-APP安全评估报告(APP上架必备)

    随着<具有舆论属性或社会动员能力的互联网信息服务安全评估规定>(以下简称<评估规定>)的发布,互联网信息服务提供者在开展具有舆论属性或社会动员能力的App服务时,必须遵循相应的 ...

  6. UT

    Mockito 官网 注解

  7. Flex布局教程:语法篇--css中的display:Flex

    先用一句话秒懂display:Flex;这句css代码,如图: 放个目录先: 目录 一.Flex布局是什么? 二.基本概念 三.容器的属性 3.1 flex-direction属性(主轴的方向) 3. ...

  8. js技术之“向数组添加元素”

    一.js中对于数组[]的操作很常见 下面记录一下js向数组添加元素的方法 const array=[1,2,3]; console.log('原数组:',array); 效果图 二.用push在数组后 ...

  9. Linux命令之剪切

    一.格式 mv source dest 二.介绍 mv: 命令 source: 源文件 dest: 目的地址 三.案例 剪切conf 文件到 /home/data  文件下 目前conf 文件是在/h ...

  10. 开源PDF处理工具——Ghostscript的安装和使用

    1. 安装 Ghostscript Windows 下载 Ghostscript: 官网:https://www.ghostscript.com/download/gsdnld.html 选择适合你的 ...