|  |  | 
 |  |  |  | 
 |  |  |     <update id="createTable" parameterType="String"> | 
 |  |  |         CREATE TABLE  IF NOT EXISTS `history_minutely_${timeUnits}` ( | 
 |  |  |             `mac` VARCHAR (20) DEFAULT NULL COMMENT '设备mac', | 
 |  |  |             `mac` VARCHAR (30) DEFAULT NULL COMMENT '设备mac', | 
 |  |  |             `time` datetime DEFAULT NULL COMMENT '数据时间', | 
 |  |  |             `value` json DEFAULT NULL COMMENT '数据', | 
 |  |  |             `version` INT (11) DEFAULT NULL COMMENT '型号', | 
 |  |  |             KEY `idx_mac` (`mac`), | 
 |  |  |             KEY `idx_time` (`time`), | 
 |  |  |             KEY `idx_mac_time` (`mac`,`time`) | 
 |  |  |             ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '分钟数据表' | 
 |  |  |     </update> | 
 |  |  |  | 
 |  |  |     <select id="getHistoryFiveMinutelyData" resultType="java.util.LinkedHashMap"> | 
 |  |  |     <select id="getHistoryMinutelyData" resultType="java.util.LinkedHashMap"> | 
 |  |  |         SELECT | 
 |  |  |         mac | 
 |  |  |         <foreach collection="sensorKeys" open="," separator="," item="sensorKey"> | 
 |  |  |             <choose> | 
 |  |  |                 <when test="sensorKey=='e23[0]'"> | 
 |  |  |                     ROUND((CASE WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0 AND | 
 |  |  |                     AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[>]]>0 | 
 |  |  |                     THEN | 
 |  |  |                     ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI() | 
 |  |  |                     WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))>0 AND | 
 |  |  |                     AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 | 
 |  |  |                     THEN | 
 |  |  |                     (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+180 | 
 |  |  |                     WHEN AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 AND | 
 |  |  |                     AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI()))<![CDATA[<]]>0 | 
 |  |  |                     THEN | 
 |  |  |                     (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+180 | 
 |  |  |                     ELSE | 
 |  |  |                     (ATAN(AVG(value->'$.e18[0]'*SIN((value->'$.e23[0]'/180)*PI()))/AVG(value->'$.e18[0]'*COS((value->'$.e23[0]'/180)*PI())))*180/PI())+360 | 
 |  |  |                     END),3) AS '${sensorKey}' | 
 |  |  |                 </when> | 
 |  |  |                 <otherwise> | 
 |  |  |                     ROUND(AVG(value->'$.${sensorKey}[0]'),3) AS '${sensorKey}' | 
 |  |  |                 </otherwise> | 
 |  |  |             </choose> | 
 |  |  |         </foreach> | 
 |  |  |         mac, `value`, version | 
 |  |  |         FROM | 
 |  |  |         history_minutely_${timeUnits} | 
 |  |  |         WHERE time <![CDATA[>=]]> #{start} AND time <![CDATA[<]]> #{end} | 
 |  |  |         GROUP BY mac | 
 |  |  |         WHERE `time` <![CDATA[>=]]> #{start} | 
 |  |  |         AND `time` <![CDATA[<]]> #{end} | 
 |  |  |         <if test="macs != null"> | 
 |  |  |             AND mac IN | 
 |  |  |             <foreach collection="macs" item="mac" open="(" close=")" separator=","> | 
 |  |  |                 #{mac} | 
 |  |  |             </foreach> | 
 |  |  |         </if> | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="getHourlyData" resultType="java.util.Map"> | 
 |  |  |         SELECT mac, `time`, `value` | 
 |  |  |         FROM history_minutely_${timeUnits} | 
 |  |  |         WHERE `time` <![CDATA[>=]]> #{start} | 
 |  |  |         AND `time` <![CDATA[<]]> #{end} | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  | </mapper> |