| <?xml version="1.0" encoding="UTF-8"?>  | 
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  | 
| <mapper namespace="com.moral.mapper.HistoryMinutelyMapper">  | 
|     <resultMap id="PairDataResultMap" type="com.moral.entity.charts.PairData" >  | 
|         <result column="format_time" property="category" jdbcType="VARCHAR" />  | 
|         <result column="value" property="value" jdbcType="DOUBLE" />  | 
|     </resultMap>  | 
|     <select id="getSersionAvgByDevice" resultType="java.util.Map">  | 
|         SELECT  | 
|             <foreach  collection="sensorKeys" separator="," item="sensorKey">  | 
|                 AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'  | 
|             </foreach>  | 
|         FROM  | 
|             history_minutely  | 
|         WHERE  | 
|             mac IN  | 
|                 (SELECT  | 
|                     d.mac   | 
|                 FROM  | 
|                     device d  | 
|                 WHERE  | 
|                     d.is_delete = 0   | 
|                     <if test="monitorPointId != null">  | 
|                     AND d.monitor_point_id = #{monitorPointId}  | 
|                     </if>  | 
|                     <if test="mac != null">  | 
|                     AND d.mac = #{mac}  | 
|                     </if>  | 
|                 )      | 
|         AND time >= #{start}  | 
|         AND time < #{end}  | 
|     </select>  | 
|       | 
|     <select id="getMonitorPointOrDeviceAvgData" resultType="java.util.Map">  | 
|         SELECT  | 
|             DATE_FORMAT(time, #{typeFormat}) time  | 
|             <foreach  collection="sensorKeys" open="," separator="," item="sensorKey">  | 
|                 AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'  | 
|             </foreach>  | 
|         FROM  | 
|             history_${timeUnits} h  | 
|         WHERE  | 
|             h.time >= #{start}  | 
|         AND h.time <![CDATA[<]]> #{end}  | 
|         <if test="mac != null">  | 
|         AND    h.mac = #{mac}  | 
|         </if>  | 
|         <if test="mac == null">  | 
|         AND    h.mac IN  | 
|             (SELECT  | 
|                 d.mac   | 
|             FROM  | 
|                 device d,  | 
|                 monitor_point mp   | 
|             WHERE  | 
|                 d.monitor_point_id = mp.id   | 
|                 <if test="provinceCode != null">  | 
|                 AND mp.province_code = #{provinceCode}  | 
|                 </if>  | 
|                 <if test="cityCode != null">  | 
|                 AND mp.city_code = #{cityCode}  | 
|                 </if>  | 
|                 <if test="areaCode != null">  | 
|                 AND mp.area_code = #{areaCode}  | 
|                 </if>  | 
|                 <if test="monitorPointId != null">  | 
|                 AND mp.id =    #{monitorPointId}  | 
|                 </if>  | 
|                 <if test="professionId != null">  | 
|                 AND d.profession_id = #{professionId}  | 
|                 </if>  | 
|             )      | 
|         </if>  | 
|           | 
|         GROUP BY  | 
|             DATE_FORMAT(time, #{typeFormat})  | 
|         ORDER BY  | 
|             time  | 
|     </select>  | 
|     <select id="selectLineChartDateByCrieria" resultType="java.util.Map">  | 
|             SELECT  | 
|                 <choose>  | 
|                     <when test="'MINUTE'==dataCondition.timeUnits.toString() and 'DEVICE'==dataCondition.areaRange.toString()">  | 
|                         <foreach collection="sensorKeys"  | 
|                                  item="sensorKey" separator="," close=",">  | 
|                                  json->'$.${sensorKey}[0]' as '${sensorKey}'  | 
|                         </foreach>  | 
|                     </when>  | 
|                     <otherwise>  | 
|                         <foreach collection="sensorKeys"  | 
|                                  item="sensorKey" separator="," close=",">  | 
|                             AVG(json->'$.${sensorKey}[0]') as '${sensorKey}'  | 
|                         </foreach>  | 
|                     </otherwise>  | 
|                 </choose>  | 
|              DATE_FORMAT(time,'${@com.moral.common.util.ReportTimeFormat@toMySqlTimeFormat(timePeriod.timeUnits)}') as format_time  | 
|              FROM  | 
|             `history_minutely` hmi  | 
|             <where>  | 
|                 and hmi.time >= #{timePeriod.startTime}  | 
|                 and hmi.time <![CDATA[<=]]> #{timePeriod.endTime}  | 
|                 <if test="dataCondition.actualTime != null">  | 
|                     and DATE_FORMAT(time,    '${@com.moral.common.util.ReportTimeFormat@toMySqlActualTimeFormat(dataCondition.timeUnits)}') = #{dataCondition.actualTime}  | 
|                 </if>  | 
|                 and hmi.mac in (  | 
|                 select mac from device dev  | 
|                 join monitor_point mpt  on dev.monitor_point_id = mpt.id  | 
|                 <where>  | 
|                      <if test='"DEVICE"==dataCondition.areaRange.toString()'>  | 
|                         and dev.id = #{dataCondition.areaRangeId}  | 
|                      </if>  | 
|                     <if test='"PROFESSION"==dataCondition.deviceDimension.toString()'>  | 
|                         and dev.profession_id = #{dataCondition.dimensionValue}  | 
|                     </if>  | 
|                     <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'>  | 
|                         and mpt.id = #{dataCondition.areaRangeId}  | 
|                     </if>  | 
|                     <if test='"PROVINCE"==dataCondition.areaRange.toString()'>  | 
|                         and mpt.province_code = #{dataCondition.areaRangeId}  | 
|                     </if>  | 
|                     <if test='"CITY"==dataCondition.areaRange.toString()'>  | 
|                         and mpt.city_code = #{dataCondition.areaRangeId}  | 
|                     </if>  | 
|                     <if test='"AREA"==dataCondition.areaRange.toString()'>  | 
|                         and mpt.area_code = #{dataCondition.areaRangeId}  | 
|                     </if>  | 
|                 </where>  | 
|                 )  | 
|             </where>  | 
|             <if test="'MINUTE'!=dataCondition.timeUnits.toString() or 'DEVICE'!=dataCondition.areaRange.toString()">  | 
|                 GROUP BY format_time  | 
|             </if>  | 
|             ORDER BY format_time asc  | 
|     </select>  | 
| </mapper> |