分時間段(年份或月份)統計,沒有數字補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')  
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM