|  |  |  | 
|---|
|  |  |  | <?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"> | 
|---|
|  |  |  | <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_${yearAndMonth} | 
|---|
|  |  |  | WHERE | 
|---|
|  |  |  | mac IN | 
|---|
|  |  |  | (SELECT | 
|---|
|  |  |  | d.mac | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | device d | 
|---|
|  |  |  | WHERE | 
|---|
|  |  |  | d.is_delete = 0 | 
|---|
|  |  |  | <if test="monitorPointId != null"> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_minutely_${yearAndMonth} | 
|---|
|  |  |  | 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"> | 
|---|
|  |  |  | <if test="mac != null"> | 
|---|
|  |  |  | AND d.mac = #{mac} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | AND time >= #{start} | 
|---|
|  |  |  | AND time < #{end} | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | 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"> | 
|---|
|  |  |  | <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"> | 
|---|
|  |  |  | 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"> | 
|---|
|  |  |  | <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"> | 
|---|
|  |  |  | <if test="cityCode != null"> | 
|---|
|  |  |  | AND mp.city_code = #{cityCode} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test="areaCode != null"> | 
|---|
|  |  |  | <if test="areaCode != null"> | 
|---|
|  |  |  | AND mp.area_code = #{areaCode} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test="monitorPointId != null"> | 
|---|
|  |  |  | <if test="monitorPointId != null"> | 
|---|
|  |  |  | AND mp.id = #{monitorPointId} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test="professionId != null"> | 
|---|
|  |  |  | <if test="professionId != null"> | 
|---|
|  |  |  | AND d.profession_id = #{professionId} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | GROUP BY | 
|---|
|  |  |  | DATE_FORMAT(time, #{typeFormat}) | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | time | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  | GROUP BY | 
|---|
|  |  |  | DATE_FORMAT(time, #{typeFormat}) | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | time | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <select id="getAreaAvgDataByAreaCode" resultType="java.util.Map"> | 
|---|
|  |  |  | <select id="getAreaAvgDataByAreaCode" resultType="java.util.Map"> | 
|---|
|  |  |  | SELECT | 
|---|
|  |  |  | DATE_FORMAT(time, #{typeFormat}) time, | 
|---|
|  |  |  | AVG(aqi_json->'$.${sensors1}') AS '${sensors2}' | 
|---|
|  |  |  | 
|---|
|  |  |  | 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=","> | 
|---|
|  |  |  | <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=","> | 
|---|
|  |  |  | </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"> | 
|---|
|  |  |  | </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 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()'> | 
|---|
|  |  |  | <if test='"PROFESSION"==dataCondition.deviceDimension.toString()'> | 
|---|
|  |  |  | and dev.profession_id = #{dataCondition.dimensionValue} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | <if test='"MONITORPOINT"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | and mpt.id = #{dataCondition.areaRangeId} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test='"PROVINCE"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | <if test='"PROVINCE"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | and mpt.province_code = #{dataCondition.areaRangeId} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test='"CITY"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | <if test='"CITY"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | and mpt.city_code = #{dataCondition.areaRangeId} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | <if test='"AREA"==dataCondition.areaRange.toString()'> | 
|---|
|  |  |  | <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()"> | 
|---|
|  |  |  | </where> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | </where> | 
|---|
|  |  |  | <if test="'MINUTE'!=dataCondition.timeUnits.toString() or 'DEVICE'!=dataCondition.areaRange.toString()"> | 
|---|
|  |  |  | GROUP BY format_time | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | ORDER BY format_time asc | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  | ORDER BY format_time asc | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!-- 无人机sensor查询 --> | 
|---|
|  |  |  | <select id="getSensorData" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | SELECT | 
|---|
|  |  |  | DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') time, | 
|---|
|  |  |  | <foreach collection="sensorKeys" item="sensorKey" separator=","> | 
|---|
|  |  |  | <!-- 无人机sensor查询 --> | 
|---|
|  |  |  | <select id="getSensorData" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | SELECT | 
|---|
|  |  |  | DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') time, | 
|---|
|  |  |  | <foreach collection="sensorKeys" item="sensorKey" separator=","> | 
|---|
|  |  |  | hm.json->'$.${sensorKey}[0]' as '${sensorKey}', | 
|---|
|  |  |  | hm.json->'$.${sensorKey}[1]' as 'min${sensorKey}', | 
|---|
|  |  |  | hm.json->'$.${sensorKey}[2]' as 'max${sensorKey}' | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_minutely as hm | 
|---|
|  |  |  | <where> | 
|---|
|  |  |  | <if test="mac!=null"> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_minutely as hm | 
|---|
|  |  |  | <where> | 
|---|
|  |  |  | <if test="mac!=null"> | 
|---|
|  |  |  | and hm.mac=#{mac} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | and hm.time >= #{startTime} | 
|---|
|  |  |  | and hm.time <![CDATA[<]]> #{endTime} | 
|---|
|  |  |  | </where> | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | hm.time | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  | and hm.time >= #{startTime} | 
|---|
|  |  |  | and hm.time <![CDATA[<]]> #{endTime} | 
|---|
|  |  |  | </where> | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | hm.time | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <select id="getSensorData2020" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | SELECT | 
|---|
|  |  |  | DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') time, | 
|---|
|  |  |  | <foreach collection="sensorKeys" item="sensorKey" separator=","> | 
|---|
|  |  |  | <select id="getSensorData2020" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | SELECT | 
|---|
|  |  |  | DATE_FORMAT(hm.time,'%Y-%m-%d %H:%i:%s') time, | 
|---|
|  |  |  | <foreach collection="sensorKeys" item="sensorKey" separator=","> | 
|---|
|  |  |  | hm.json->'$.${sensorKey}[0]' as '${sensorKey}', | 
|---|
|  |  |  | hm.json->'$.${sensorKey}[1]' as 'min${sensorKey}', | 
|---|
|  |  |  | hm.json->'$.${sensorKey}[2]' as 'max${sensorKey}' | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_minutely_${yearAndMonth} as hm | 
|---|
|  |  |  | <where> | 
|---|
|  |  |  | <if test="mac!=null"> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_minutely_${yearAndMonth} as hm | 
|---|
|  |  |  | <where> | 
|---|
|  |  |  | <if test="mac!=null"> | 
|---|
|  |  |  | and hm.mac=#{mac} | 
|---|
|  |  |  | </if> | 
|---|
|  |  |  | and hm.time >= #{startTime} | 
|---|
|  |  |  | and hm.time <![CDATA[<]]> #{endTime} | 
|---|
|  |  |  | </where> | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | hm.time | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  | and hm.time >= #{startTime} | 
|---|
|  |  |  | and hm.time <![CDATA[<]]> #{endTime} | 
|---|
|  |  |  | </where> | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | hm.time | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <select id="getDevicesAvgDataToExcel" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | select | 
|---|
|  |  |  | rs.monitorPointName,rs.name, | 
|---|
|  |  |  | <foreach collection="timeList" separator="," item="time"> | 
|---|
|  |  |  | <select id="getDevicesAvgDataToExcel" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | select | 
|---|
|  |  |  | rs.monitorPointName,rs.name, | 
|---|
|  |  |  | <foreach collection="timeList" separator="," item="time"> | 
|---|
|  |  |  | max(case time when #{time} then rs.${sensorKey} else "" end) as #{time} | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | from | 
|---|
|  |  |  | (SELECT | 
|---|
|  |  |  | m.name as monitorPointName,d.name,DATE_FORMAT(time, #{typeFormat}) time, | 
|---|
|  |  |  | <foreach collection="sensorKeys" separator="," item="sensorKey"> | 
|---|
|  |  |  | from | 
|---|
|  |  |  | (SELECT | 
|---|
|  |  |  | m.name as monitorPointName,d.name,DATE_FORMAT(time, #{typeFormat}) time, | 
|---|
|  |  |  | <foreach collection="sensorKeys" separator="," item="sensorKey"> | 
|---|
|  |  |  | AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}' | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_${timeUnits} h, | 
|---|
|  |  |  | device d, | 
|---|
|  |  |  | monitor_point m | 
|---|
|  |  |  | WHERE | 
|---|
|  |  |  | h.mac=d.mac | 
|---|
|  |  |  | AND d.monitor_point_id=m.id | 
|---|
|  |  |  | AND h.time >= #{start} | 
|---|
|  |  |  | AND h.time <![CDATA[<=]]> #{end} | 
|---|
|  |  |  | AND h.mac in | 
|---|
|  |  |  | <foreach collection="macs" open="(" separator="," close=")" | 
|---|
|  |  |  | item="mac"> | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_${timeUnits} h, | 
|---|
|  |  |  | device d, | 
|---|
|  |  |  | monitor_point m | 
|---|
|  |  |  | WHERE | 
|---|
|  |  |  | h.mac=d.mac | 
|---|
|  |  |  | AND d.monitor_point_id=m.id | 
|---|
|  |  |  | AND h.time >= #{start} | 
|---|
|  |  |  | AND h.time <![CDATA[<=]]> #{end} | 
|---|
|  |  |  | AND h.mac in | 
|---|
|  |  |  | <foreach collection="macs" open="(" separator="," close=")" | 
|---|
|  |  |  | item="mac"> | 
|---|
|  |  |  | #{mac} | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | GROUP BY | 
|---|
|  |  |  | h.mac,m.name,d.name,DATE_FORMAT(time, #{typeFormat}) | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | h.mac) rs | 
|---|
|  |  |  | GROUP BY rs.monitorPointName,rs.name | 
|---|
|  |  |  | order by rs.monitorPointName | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  | GROUP BY | 
|---|
|  |  |  | h.mac,m.name,d.name,DATE_FORMAT(time, #{typeFormat}) | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | h.mac) rs | 
|---|
|  |  |  | GROUP BY rs.monitorPointName,rs.name | 
|---|
|  |  |  | order by rs.monitorPointName | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <select id="getDevicesSensorsAvgDataToExcel" resultType="java.util.LinkedHashMap"> | 
|---|
|  |  |  | select | 
|---|
|  |  |  | rs.monitorPointName,rs.name, | 
|---|
|  |  |  | <foreach collection="timeList" separator="," item="time"> | 
|---|
|  |  |  | max(case time when #{time} then rs.json else "" end) as #{time} | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | from | 
|---|
|  |  |  | (SELECT | 
|---|
|  |  |  | m.name as monitorPointName,d.name,DATE_FORMAT(time, #{typeFormat}) time,h.json | 
|---|
|  |  |  | FROM | 
|---|
|  |  |  | history_${timeUnits} h, | 
|---|
|  |  |  | device d, | 
|---|
|  |  |  | monitor_point m | 
|---|
|  |  |  | WHERE | 
|---|
|  |  |  | h.mac=d.mac | 
|---|
|  |  |  | AND d.monitor_point_id=m.id | 
|---|
|  |  |  | AND h.time >= #{start} | 
|---|
|  |  |  | AND h.time <![CDATA[<=]]> #{end} | 
|---|
|  |  |  | AND h.mac in | 
|---|
|  |  |  | <foreach collection="macs" open="(" separator="," close=")" | 
|---|
|  |  |  | item="mac"> | 
|---|
|  |  |  | #{mac} | 
|---|
|  |  |  | </foreach> | 
|---|
|  |  |  | ORDER BY | 
|---|
|  |  |  | h.mac) rs | 
|---|
|  |  |  | GROUP BY rs.monitorPointName,rs.name | 
|---|
|  |  |  | order by rs.monitorPointName | 
|---|
|  |  |  | </select> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </mapper> | 
|---|