zoukankan      html  css  js  c++  java
  • 分时间段(年份或月份)统计,没有数字补0 Java(替代 MYSQL) 做法

    需求如下~

    输入年份,表格第一行 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')  
     

     

  • 相关阅读:
    sql参数化查询语句
    委托窗体之间的传值
    js交换变量写法
    win8环境下安装sql2008r2
    无法绑定由多个部分组成的标识符“System.Data.DataRowView” 遇到问题转帖
    利用stringBuilder操作html文件
    阿里云 发送手机短信
    在定时器中service注入不进去的解决方案
    mysql 排序后在查询
    Hibernate使用Criteria实现分页
  • 原文地址:https://www.cnblogs.com/yizhizhangBlog/p/10081634.html
Copyright © 2011-2022 走看看