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