Add SQL queries for hourly energy consumption tracking and refactor daily energy consumed query

This commit is contained in:
faris Aljohari
2025-04-15 12:20:37 +03:00
parent 9f3dce535d
commit 30dd8318e3
3 changed files with 140 additions and 1 deletions

View File

@ -61,5 +61,8 @@ JOIN energy_phase_B
and total_energy.date=energy_phase_B.date
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.date=energy_phase_C.date;

View File

@ -0,0 +1,65 @@
-- model shows the energy consumed per day per device
WITH total_energy AS (
SELECT
device_id,
event_time::date AS date,
MIN(value)::integer AS min_value,
MAX(value)::integer AS max_value
FROM "device-status-log"
where code='ActivePower'
GROUP BY device_id, date
)
, energy_phase_A AS (
SELECT
device_id,
event_time::date AS date,
MIN(value)::integer AS min_value,
MAX(value)::integer AS max_value
FROM "device-status-log"
where code='ActivePowerA'
GROUP BY device_id, date
)
, energy_phase_B AS (
SELECT
device_id,
event_time::date AS date,
MIN(value)::integer AS min_value,
MAX(value)::integer AS max_value
FROM "device-status-log"
where code='ActivePowerB'
GROUP BY device_id, date
)
, energy_phase_C AS (
SELECT
device_id,
event_time::date AS date,
MIN(value)::integer AS min_value,
MAX(value)::integer AS max_value
FROM "device-status-log"
where code='ActivePowerC'
GROUP BY device_id, date
)
SELECT
total_energy.device_id,
total_energy.date,
(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
JOIN energy_phase_B
ON total_energy.device_id=energy_phase_B.device_id
and total_energy.date=energy_phase_B.date
JOIN energy_phase_C
ON total_energy.device_id=energy_phase_C.device_id
and total_energy.date=energy_phase_C.date;

View File

@ -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;