DELETE FROM wms_energy_coil_daily WHERE task_id = #{taskId} AND c.task_id = #{bo.taskId} AND c.energy_type_id = #{bo.energyTypeId} AND c.meter_id = #{bo.meterId} AND c.warehouse_id = #{bo.warehouseId} AND c.actual_warehouse_id = #{bo.actualWarehouseId} AND c.calc_date =]]> #{bo.startDate} AND c.calc_date #{bo.endDate} AND c.enter_coil_no LIKE CONCAT('%', #{bo.enterCoilNo}, '%') AND c.current_coil_no LIKE CONCAT('%', #{bo.currentCoilNo}, '%') SELECT base.warehouse_id, ( SELECT ec_inner.start_time FROM wms_energy_area_link eal_inner JOIN ems_meter m_inner ON eal_inner.meter_id = m_inner.meter_id JOIN ems_energy_consumption ec_inner ON m_inner.meter_id = ec_inner.meter_id WHERE eal_inner.warehouse_id = base.warehouse_id AND ec_inner.end_time = base.latest_end_time ORDER BY ec_inner.start_time DESC LIMIT 1 ) AS warehouse_start_time, base.latest_end_time AS warehouse_end_time FROM ( SELECT eal.warehouse_id, MAX(ec.end_time) AS latest_end_time FROM wms_energy_area_link eal JOIN ems_meter m ON eal.meter_id = m.meter_id JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id WHERE eal.warehouse_id IS NOT NULL AND ec.end_time IS NOT NULL GROUP BY eal.warehouse_id ) base SELECT wmt.warehouse_id, et.energy_type_id, et.name AS energy_type_name, et.unit AS energy_unit, SUM(COALESCE(ec.consumption, 0)) AS total_consumption, SUM( COALESCE(ec.consumption, 0) * COALESCE( CASE WHEN er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 THEN COALESCE(tpl.rate, er.rate, 0) WHEN er.use_peak_valley = 1 THEN COALESCE(rtpl.rate, er.rate, 0) WHEN er.use_tiered_pricing = 1 THEN COALESCE(rt.rate, er.rate, 0) ELSE COALESCE(er.rate, 0) END, 0 ) ) AS total_cost FROM ( ) wmt LEFT JOIN wms_energy_area_link eal ON wmt.warehouse_id = eal.warehouse_id LEFT JOIN ems_meter m ON eal.meter_id = m.meter_id LEFT JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id AND ec.start_time =]]> wmt.warehouse_start_time AND ec.end_time wmt.warehouse_end_time LEFT JOIN ems_energy_type et ON m.energy_type_id = et.energy_type_id LEFT JOIN ( SELECT er1.* FROM ems_energy_rate er1 WHERE er1.del_flag = '0' ) er ON et.energy_type_id = er.energy_type_id AND er.effective_date COALESCE(DATE(wmt.warehouse_end_time), CURDATE()) AND ( er.expiry_date IS NULL OR er.expiry_date =]]> COALESCE(DATE(wmt.warehouse_start_time), CURDATE()) ) LEFT JOIN ems_rate_time_period_link rtpl ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 0 AND rtpl.energy_rate_id = er.energy_rate_id AND rtpl.del_flag = '0' LEFT JOIN ems_time_period tp ON rtpl.period_id = tp.period_id AND tp.del_flag = '0' AND ( (tp.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp.start_time, '%H:%i') AND STR_TO_DATE(tp.end_time, '%H:%i')) OR (tp.cross_day = 1 AND (TIME(ec.end_time) =]]> STR_TO_DATE(tp.start_time, '%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp.end_time, '%H:%i'))) ) LEFT JOIN ems_rate_tier rt ON er.use_peak_valley = 0 AND er.use_tiered_pricing = 1 AND rt.energy_rate_id = er.energy_rate_id AND rt.del_flag = '0' AND (rt.min_usage IS NULL OR ec.consumption =]]> rt.min_usage) AND (rt.max_usage IS NULL OR ec.consumption rt.max_usage) LEFT JOIN ems_rate_tier rt_combo ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 AND rt_combo.energy_rate_id = er.energy_rate_id AND rt_combo.del_flag = '0' AND (rt_combo.min_usage IS NULL OR ec.consumption =]]> rt_combo.min_usage) AND (rt_combo.max_usage IS NULL OR ec.consumption rt_combo.max_usage) LEFT JOIN ems_tier_period_link tpl ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 AND tpl.tier_id = rt_combo.tier_id AND tpl.del_flag = '0' LEFT JOIN ems_time_period tp_combo ON tpl.period_id = tp_combo.period_id AND tp_combo.del_flag = '0' AND ( (tp_combo.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp_combo.start_time, '%H:%i') AND STR_TO_DATE(tp_combo.end_time, '%H:%i')) OR (tp_combo.cross_day = 1 AND (TIME(ec.end_time) =]]> STR_TO_DATE(tp_combo.start_time, '%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp_combo.end_time, '%H:%i'))) ) WHERE wmt.warehouse_start_time IS NOT NULL AND wmt.warehouse_end_time IS NOT NULL GROUP BY wmt.warehouse_id, et.energy_type_id, et.name, et.unit SELECT wmt.warehouse_id, SUM(COALESCE(ec.consumption, 0)) AS total_warehouse_consumption, SUM( COALESCE(ec.consumption, 0) * COALESCE( CASE WHEN er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 THEN COALESCE(tpl.rate, er.rate, 0) WHEN er.use_peak_valley = 1 THEN COALESCE(rtpl.rate, er.rate, 0) WHEN er.use_tiered_pricing = 1 THEN COALESCE(rt.rate, er.rate, 0) ELSE COALESCE(er.rate, 0) END, 0 ) ) AS total_warehouse_cost FROM ( ) wmt LEFT JOIN wms_energy_area_link eal ON wmt.warehouse_id = eal.warehouse_id LEFT JOIN ems_meter m ON eal.meter_id = m.meter_id LEFT JOIN ems_energy_consumption ec ON m.meter_id = ec.meter_id AND ec.start_time >= wmt.warehouse_start_time AND ec.end_time wmt.warehouse_end_time LEFT JOIN ems_energy_type et ON m.energy_type_id = et.energy_type_id LEFT JOIN ( SELECT er1.* FROM ems_energy_rate er1 WHERE er1.del_flag = '0' ) er ON et.energy_type_id = er.energy_type_id AND er.effective_date COALESCE(DATE(wmt.warehouse_end_time), CURDATE()) AND (er.expiry_date IS NULL OR er.expiry_date >= COALESCE(DATE(wmt.warehouse_start_time), CURDATE())) LEFT JOIN ems_rate_time_period_link rtpl ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 0 AND rtpl.energy_rate_id = er.energy_rate_id AND rtpl.del_flag = '0' LEFT JOIN ems_time_period tp ON rtpl.period_id = tp.period_id AND tp.del_flag = '0' AND ( (tp.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp.start_time,'%H:%i') AND STR_TO_DATE(tp.end_time,'%H:%i')) OR (tp.cross_day = 1 AND (TIME(ec.end_time) >= STR_TO_DATE(tp.start_time,'%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp.end_time,'%H:%i'))) ) LEFT JOIN ems_rate_tier rt ON er.use_peak_valley = 0 AND er.use_tiered_pricing = 1 AND rt.energy_rate_id = er.energy_rate_id AND rt.del_flag = '0' AND (rt.min_usage IS NULL OR ec.consumption =]]> rt.min_usage) AND (rt.max_usage IS NULL OR ec.consumption rt.max_usage) LEFT JOIN ems_rate_tier rt_combo ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 AND rt_combo.energy_rate_id = er.energy_rate_id AND rt_combo.del_flag = '0' AND (rt_combo.min_usage IS NULL OR ec.consumption =]]> rt_combo.min_usage) AND (rt_combo.max_usage IS NULL OR ec.consumption rt_combo.max_usage) LEFT JOIN ems_tier_period_link tpl ON er.use_peak_valley = 1 AND er.use_tiered_pricing = 1 AND tpl.tier_id = rt_combo.tier_id AND tpl.del_flag = '0' LEFT JOIN ems_time_period tp_combo ON tpl.period_id = tp_combo.period_id AND tp_combo.del_flag = '0' AND ( (tp_combo.cross_day = 0 AND TIME(ec.end_time) BETWEEN STR_TO_DATE(tp_combo.start_time,'%H:%i') AND STR_TO_DATE(tp_combo.end_time,'%H:%i')) OR (tp_combo.cross_day = 1 AND (TIME(ec.end_time) >= STR_TO_DATE(tp_combo.start_time,'%H:%i') OR TIME(ec.end_time) STR_TO_DATE(tp_combo.end_time,'%H:%i'))) ) WHERE wmt.warehouse_start_time IS NOT NULL AND wmt.warehouse_end_time IS NOT NULL GROUP BY wmt.warehouse_id