diff --git a/fact_hourly_active_energy/fact_hourly_active_energy.sql b/fact_hourly_active_energy/fact_hourly_active_energy.sql new file mode 100644 index 0000000..e69de29 diff --git a/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql b/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql new file mode 100644 index 0000000..60de9fe --- /dev/null +++ b/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql @@ -0,0 +1,71 @@ +WITH total_energy AS ( + SELECT + device_id, + event_time::date AS date, + EXTRACT(HOUR FROM event_time) AS hour, + MIN(value)::integer AS min_value, + MAX(value)::integer AS max_value + FROM "device-status-log" + WHERE code = 'EnergyConsumed' + GROUP BY device_id, date, hour +), + +energy_phase_A AS ( + SELECT + device_id, + event_time::date AS date, + EXTRACT(HOUR FROM event_time) AS hour, + MIN(value)::integer AS min_value, + MAX(value)::integer AS max_value + FROM "device-status-log" + WHERE code = 'EnergyConsumedA' + GROUP BY device_id, date, hour +), + +energy_phase_B AS ( + SELECT + device_id, + event_time::date AS date, + EXTRACT(HOUR FROM event_time) AS hour, + MIN(value)::integer AS min_value, + MAX(value)::integer AS max_value + FROM "device-status-log" + WHERE code = 'EnergyConsumedB' + GROUP BY device_id, date, hour +), + +energy_phase_C AS ( + SELECT + device_id, + event_time::date AS date, + EXTRACT(HOUR FROM event_time) AS hour, + MIN(value)::integer AS min_value, + MAX(value)::integer AS max_value + FROM "device-status-log" + WHERE code = 'EnergyConsumedC' + GROUP BY device_id, date, hour +) + +SELECT + total_energy.device_id, + total_energy.date, + total_energy.hour, + (total_energy.max_value - total_energy.min_value) AS energy_consumed_kW, + (energy_phase_A.max_value - energy_phase_A.min_value) AS energy_consumed_A, + (energy_phase_B.max_value - energy_phase_B.min_value) AS energy_consumed_B, + (energy_phase_C.max_value - energy_phase_C.min_value) AS energy_consumed_C +FROM total_energy +JOIN energy_phase_A + ON total_energy.device_id = energy_phase_A.device_id + AND total_energy.date = energy_phase_A.date + AND total_energy.hour = energy_phase_A.hour +JOIN energy_phase_B + ON total_energy.device_id = energy_phase_B.device_id + AND total_energy.date = energy_phase_B.date + AND total_energy.hour = energy_phase_B.hour +JOIN energy_phase_C + ON total_energy.device_id = energy_phase_C.device_id + AND total_energy.date = energy_phase_C.date + AND total_energy.hour = energy_phase_C.hour +ORDER BY total_energy.device_id, total_energy.date, total_energy.hour; +