| <?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.HistoryMapper">  | 
|     <select id="selectValueByMacAndTime" resultType="java.lang.String">  | 
|         select `value` from history  | 
|         where  time = #{time} and mac = #{mac}  | 
|         limit 0,1  | 
|     </select>  | 
|   | 
|     <select id="getAreaAllDataByAccount" resultType="java.util.LinkedHashMap">  | 
|         SELECT  | 
|         <if test="macKey != null">  | 
|             d.`name`,  | 
|         </if>  | 
|         <foreach collection="sensorKeys" separator="," item="sensorKey">  | 
|             AVG(h.`value` ->'$.${sensorKey}[0]') AS '${sensorKey}'  | 
|         </foreach>  | 
|         FROM  | 
|             history h,  | 
|             device d,  | 
|             monitor_point mp  | 
|         WHERE  | 
|             h.mac = d.mac  | 
|             AND d.monitor_point_id = mp.id  | 
|             <if test="areaCode != null">  | 
|                 AND mp.area_code = #{areaCode}  | 
|             </if>  | 
|             <if test="start != null">  | 
|                 AND h.time >= #{start}  | 
|             </if>  | 
|             <if test="end != null">  | 
|                 AND h.time < #{end}  | 
|             </if>  | 
|             <if test="monitorPointId != null">  | 
|                 AND mp.id = #{monitorPointId}  | 
|             </if>  | 
|             <if test="orgIds != null and orgIds.size > 0">  | 
|                 AND mp.organization_id IN  | 
|                 <foreach collection="orgIds" open="(" separator="," close=")"  | 
|                     item="listItem">  | 
|                     #{listItem}  | 
|                 </foreach>  | 
|             </if>  | 
|         <if test="macKey != null">  | 
|             GROUP BY d.id  | 
|             ORDER BY ${macKey} desc  | 
|         </if>  | 
|     </select>  | 
|   | 
|     <select id="getRegionRankingData" resultType="java.util.Map">  | 
|         SELECT  | 
|             AVG( h.${column} -> '$.${sensorKey}[0]' ) avg ,  | 
|             <if test="dimension == 'profession'">  | 
|                 p.`name`  | 
|             </if>  | 
|             <if test="dimension == 'monitorPoint'">  | 
|                 mp.`name`  | 
|             </if>  | 
|             <if test="dimension == 'region'">  | 
|                 r.${nextLevel}_name AS 'name'  | 
|             </if>  | 
|         FROM  | 
|             <if test="dimension == 'profession'">  | 
|                 profession p ,   | 
|             </if>  | 
|             <if test="dimension == 'region'">  | 
|                 ${nextLevel} r,  | 
|             </if>  | 
|             device d,  | 
|             ${table} h,  | 
|             monitor_point mp  | 
|         WHERE  | 
|             d.mac = h.mac   | 
|             AND d.is_delete = '0'  | 
|             AND mp.is_delete = '0'  | 
|             AND d.monitor_point_id = mp.id   | 
|             AND h.time >= #{start}  | 
|             AND mp.${regionType}_code = #{regionCode}  | 
|             <if test="dimension == 'profession'">  | 
|                 AND d.profession_id = p.id   | 
|             </if>  | 
|             <if test="dimension == 'region'">  | 
|                 AND r.${nextLevel}_code = mp.${nextLevel}_code  | 
|             </if>  | 
|             <if test="orgIds != null and orgIds.size > 0">  | 
|                 AND mp.organization_id IN  | 
|                 <foreach  collection="orgIds" open="(" separator="," close=")" item="listItem">  | 
|                     #{listItem}  | 
|                 </foreach>  | 
|             </if>  | 
|         GROUP BY  | 
|             <if test="dimension == 'profession'">  | 
|                 p.id  | 
|             </if>  | 
|             <if test="dimension == 'monitorPoint'">  | 
|                 mp.id  | 
|             </if>  | 
|             <if test="dimension == 'region'">  | 
|                 mp.${nextLevel}_code  | 
|             </if>  | 
|         ORDER BY  | 
|             avg DESC  | 
|         <if test="dimension == 'monitorPoint'">  | 
|         LIMIT 0,50  | 
|         </if>  | 
|     </select>  | 
|       | 
|     <select id="selectNextLevelRegion" resultType="string">  | 
|         SELECT  | 
|             ${nextLevel}_name AS 'name'   | 
|         FROM  | 
|             ${nextLevel}  | 
|         WHERE  | 
|             ${regionType}_code = #{regionCode}  | 
|     </select>  | 
|   | 
|     <select id="getDischargeByRegion" resultType="java.util.Map">  | 
|         SELECT  | 
|             mp.`name`,  | 
|             dis.`value` -> '$.${sensorKey}' 'value'  | 
|         FROM  | 
|             monitor_point mp,  | 
|             discharge dis   | 
|         WHERE  | 
|             dis.monitor_point_id = mp.id   | 
|             AND mp.${regionType}_code = #{regionCode}  | 
|             AND dis.`year` = #{year}  | 
|     </select>  | 
|       | 
|     <select id="getValueByMacAndSize" resultType="java.util.Map">  | 
|         SELECT   | 
|             value,  | 
|             time  | 
|         FROM  | 
|             history   | 
|         WHERE  | 
|             mac = #{mac}   | 
|         ORDER BY  | 
|             time DESC   | 
|         LIMIT #{size}  | 
|     </select>  | 
|       | 
|     <select id="getActualDataByRegion" resultType="java.util.Map">  | 
|         SELECT  | 
|         <foreach collection="sensorKeys" separator="," item="sensorKey">  | 
|             MAX( `value` ->> '$.${sensorKey}' ) * 1 AS '${sensorKey}'   | 
|         </foreach>  | 
|         FROM  | 
|             history h ,  | 
|             device d,  | 
|             monitor_point mp  | 
|         <where>  | 
|             h.mac = d.mac   | 
|             AND d.monitor_point_id = mp.id   | 
|         <if test="orgIds != null and orgIds.size > 0">  | 
|             AND mp.organization_id IN  | 
|             <foreach  collection="orgIds" open="(" separator="," close=")" item="listItem">  | 
|                 #{listItem}  | 
|             </foreach>  | 
|         </if>  | 
|             AND h.time >= #{start}              | 
|             AND h.time < #{end}      | 
|         </where>  | 
|     </select>  | 
| </mapper> |