需求如下~

 

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

輸入年份和月份  表格第一行 1--31  具體天數(shù)

表格第二行就是統(tǒng)計(jì)數(shù)量,沒有補(bǔ)0.

 

看完首先想到MYSQL查詢出連續(xù)一段時(shí)間和數(shù)量,沒有 就為0.

好像這樣

 

但是  做法 需要新建一個(gè)時(shí)間表 ,那個(gè)時(shí)間表里面的數(shù)據(jù)一定要事先生成,生成個(gè)幾十年就夠用了。再和查數(shù)據(jù)表連接。

可參考  http://www.rzrgm.cn/LUA123/p/6155414.html

 

下面選擇用Java后臺(tái)處理整個(gè)需求,不用MYSQL。

查出有數(shù)據(jù)的時(shí)間 和 數(shù)量不難,要點(diǎn)是 按 連續(xù)月份  和日 排列 。

 

 

查出有數(shù)據(jù)的時(shí)間和數(shù)量 放入Map 

 

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

查出 連續(xù)時(shí)間段  。

遍歷連續(xù)時(shí)間段,通過(map)判斷下,   有數(shù)量  就 set 數(shù)量 進(jìn)一個(gè)對(duì)象,沒有就 把這個(gè)對(duì)象 數(shù)量位置為0。 對(duì)象另一個(gè)屬性不是查出來的

時(shí)間,是如圖第一行。

挨個(gè) 添加進(jìn)List。后臺(tái)Java是

 

public void sumDays () {
        
        String nf = getPara("tjnf");
        String yf = getPara("tjyf");
        List<Record> jyrslist = JyrstjService.service.findjyrstj(nf,yf);    //有數(shù)據(jù)的時(shí)間段和數(shù)量
        
        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);  //連續(xù)的時(shí)間段
                
                for (String day : daySpaceDate) {
                    Record record = new Record();
                    Date date = ToolDateTime.parse(day,ToolDateTime.pattern_ymd);
                    record.set("sj", date.getDate());                  //把連續(xù)時(shí)間段變成對(duì)象屬性 1-30 天數(shù)
                    
                    if ( jymap.containsKey(day)) {                             // 有數(shù)量  就 set 數(shù)量 進(jìn)一個(gè)對(duì)象
                        String sum = jymap.get(day).get("sum").toString();
                        total += Integer.valueOf(sum);                         //合計(jì),與重點(diǎn)無(wú)關(guān)
                        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) );            //某年的連續(xù)月份處理
                
                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語(yǔ)句 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')