數據庫的查詢,關於時間的情況

public Map<String, List<List<String>>> getWaterLevelReport(
   WaterLevelMeter waterLevelMeter, String dateType, String date) {
  // TODO Auto-generated method stub
  Map<String, List<List<String>>> map = new LinkedHashMap<String, List<List<String>>>();
  try {
   HibernateUtil.beginTransaction();

   @SuppressWarnings("unused")
   String dateTypeOne = dateType;// 獲得時間類型
   String sql = "select ";
   if (StringUtil.isNotEmpty(dateType)) {
    if (dateType.equals("yyyy-MM-dd")) {
     dateTypeOne = "HH24:Mi";
     // 具體數據
     sql += "to_char(f.f_caijishijian,'HH24:Mi')"
       + ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
       + "from T_SHUIWEI_TEMP f "
       + "where f.f_zhandianbianhao = :code "
       + "and to_char(f.f_caijishijian,:dateType) = :term "
       + "group by to_char(f.f_caijishijian,'HH24:Mi') "
       + "order by to_char(f.f_caijishijian,'HH24:Mi')";
    }

else if(dateType.equals("yyyy-MM")){
     dateTypeOne = "yyyy-MM-dd";
     //不是group by 參數
//     sql += "to_char(f.f_caijishijian,:dateTypeOne)"
//       + ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
//       + "from T_SHUIWEI_TEMP f "
//       + "where f.f_zhandianbianhao = :code "
//       + "and to_char(f.f_caijishijian,:dateType) = :term "
//       + "group by to_char(f.f_caijishijian,:dateTypeOne) "
//       + "order by to_char(f.f_caijishijian,:dateTypeOne)";


     sql += "to_char(f.f_caijishijian,'yyyy-MM-dd')"
       + ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
       + "from T_SHUIWEI_TEMP f "
       + "where f.f_zhandianbianhao = :code "
       + "and to_char(f.f_caijishijian,:dateType) = :term "
       + "group by to_char(f.f_caijishijian,'yyyy-MM-dd') "
       + "order by to_char(f.f_caijishijian,'yyyy-MM-dd')";
    }else{
     dateTypeOne = "yyyy-MM";
     sql += "to_char(f.f_caijishijian,'yyyy-MM')"
       + ",avg(f.f_shuiwei),avg(f.f_dianya),avg(f.f_wendu),count(*) "
       + "from T_SHUIWEI_TEMP f "
       + "where f.f_zhandianbianhao = :code "
       + "and to_char(f.f_caijishijian,:dateType) = :term "
       + "group by to_char(f.f_caijishijian,'yyyy-MM') "
       + "order by to_char(f.f_caijishijian,'yyyy-MM')";
    }
   }
    SQLQuery sqlQuery = HibernateUtil.getSession().createSQLQuery(sql);
   if (StringUtil.isNotEmpty(date))
    sqlQuery.setString("term", date);
   if (StringUtil.isNotEmpty(dateType))
    sqlQuery.setString("dateType", dateType);
//   if (StringUtil.isNotEmpty(dateTypeOne))
//    sqlQuery.setString("dateTypeOne", dateTypeOne);
   @SuppressWarnings("unchecked")
   List<Object[]> list = (List<Object[]>) sqlQuery.list();

   List<List<String>> stringList = new ArrayList<List<String>>();
   
   float avgSw = 0;
   float maxSw = 0;
   float minSw = 1000;
   String maxSwDate = "";
   String minSwDate = "";
   float avgDy = 0;
   float maxDy = 0;
   float minDy = 1000;
   String maxDyDate = "";
   String minDyDate = "";
   float avgWd = 0;
   float maxWd = 0;
   float minWd = 1000;
   String maxWdDate = "";
   String minWdDate = "";
   int countAll = 0;
   int waringAll = 0;
   DecimalFormat numFmt = new DecimalFormat("0.00"); 
   for (int i = 0; i < list.size(); i++) {
    Object[] object = list.get(i);
    //水位平均 最大 最小
    countAll += Integer.parseInt(list.get(i)[4].toString());
    avgSw += Float.valueOf(numFmt.format(list.get(i)[1]));
    if(maxSw < Float.valueOf(numFmt.format(list.get(i)[1]))){
     maxSw = Float.valueOf(numFmt.format(list.get(i)[1]));
     maxSwDate = list.get(i)[0].toString();
    }
    if(minSw > Float.valueOf(numFmt.format(list.get(i)[1]))){
     minSw = Float.valueOf(numFmt.format(list.get(i)[1]));
     minSwDate = list.get(i)[0].toString();
    }
    avgDy += Float.valueOf(numFmt.format(list.get(i)[2]));
    if(maxDy < Float.valueOf(numFmt.format(list.get(i)[2]))){
     maxDy = Float.valueOf(numFmt.format(list.get(i)[2]));
     maxDyDate = list.get(i)[0].toString();
    }
    if(minDy >Float.valueOf(numFmt.format(list.get(i)[2]))){
     minDy = Float.valueOf(numFmt.format(list.get(i)[2]));
     minDyDate = list.get(i)[0].toString();
    }
    avgWd += Float.valueOf(list.get(i)[3].toString());
    if(maxWd < Float.valueOf(numFmt.format(list.get(i)[3]))){
     maxWd = Float.valueOf(numFmt.format(list.get(i)[3]));
     maxWdDate = list.get(i)[0].toString();
    }
    if(minWd > Float.valueOf(numFmt.format(list.get(i)[3]))){
     minWd = Float.valueOf(numFmt.format(list.get(i)[3]));
     minWdDate = list.get(i)[0].toString();
    }
    
    List<String> listdate = new ArrayList<String>();
    
    for (int j = 0; j < object.length; j++) {
     if(j == 1||j==2||j==3){
      listdate.add(numFmt.format(object[j]).toString());
     }else{      
      listdate.add(object[j].toString());
     }
    }
    listdate.add("0");
    stringList.add(listdate);
   }
   avgSw = avgSw/list.size();
   avgDy = avgDy/list.size();
   avgWd = avgWd/list.size();
   List<List<String>> listAvgA = new ArrayList<List<String>>();
   List<String> listAvg = new ArrayList<String>();
   listAvg.add(numFmt.format(avgSw));
   listAvg.add(numFmt.format(avgDy));
   listAvg.add(numFmt.format(avgWd));
   listAvg.add(String.valueOf(countAll));
   listAvg.add(String.valueOf(waringAll));
   listAvgA.add(listAvg);
   List<List<String>> listMaxA = new ArrayList<List<String>>();
   List<String> listMax = new ArrayList<String>();
   listMax.add(String.valueOf(maxSw));
   listMax.add(String.valueOf(maxDy));
   listMax.add(String.valueOf(maxWd));
   listMax.add("");
   listMax.add("");
   listMaxA.add(listMax);
   List<List<String>> listMaxDateA = new ArrayList<List<String>>();
   List<String> listMaxDate = new ArrayList<String>();
   listMaxDate.add(maxSwDate);
   listMaxDate.add(maxDyDate);
   listMaxDate.add(maxWdDate);
   listMaxDate.add("");
   listMaxDate.add("");
   listMaxDateA.add(listMaxDate);
   List<List<String>> listMinA = new ArrayList<List<String>>();
   List<String> listMin = new ArrayList<String>();
   listMin.add(String.valueOf(minSw));
   listMin.add(String.valueOf(minDy));
   listMin.add(String.valueOf(minWd));
   listMin.add("");
   listMin.add("");
   listMinA.add(listMin);
   List<List<String>> listMinDateA = new ArrayList<List<String>>();
   List<String> listMinDate = new ArrayList<String>();
   listMinDate.add(minSwDate);
   listMinDate.add(minDyDate);
   listMinDate.add(minWdDate);
   listMinDate.add("");
   listMinDate.add("");
   listMinDateA.add(listMinDate);
   map.put("list", stringList);
   map.put("平均值/累計值",listAvgA);
   map.put("最大值",listMaxA);
   map.put("最大值時間",listMaxDateA);
   map.put("最小值",listMinA);
   map.put("最小值時間",listMinDateA);
   HibernateUtil.commitTransaction();
   return map;
  } catch (Exception e) {
   HibernateUtil.rollbackTransaction();
   return null;
  }
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章