ZhuDongming
2020-04-26 dba54bf8c8f9299d61c05bf3a941708ea399c998
src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -179,19 +179,26 @@
        hm.time
    </select>
    <select id="getDevicesAvgDataToExcel" resultType="java.util.Map">
        SELECT
        d.name,DATE_FORMAT(time, #{typeFormat}) 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">
            AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
        </foreach>
        FROM
        history_${timeUnits} h,
        device d
        device d,
        monitor_point m
        WHERE
        h.mac=d.mac
        AND
        h.time >= #{start}
        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=")"
@@ -199,9 +206,40 @@
            #{mac}
        </foreach>
        GROUP BY
        h.mac,d.name,DATE_FORMAT(time, #{typeFormat})
        h.mac,m.name,d.name,DATE_FORMAT(time, #{typeFormat})
        ORDER BY
        h.mac
        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>