From 78cb65d712d05810863a6f5deb7ee20941408fd3 Mon Sep 17 00:00:00 2001 From: Dona Maria Absi <49731027+DonaAbsi@users.noreply.github.com> Date: Tue, 15 Apr 2025 14:40:52 +0300 Subject: [PATCH 1/3] Added parameter setup --- .../fact_hourly_energy_consumed.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql b/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql index 60de9fe..a3dd854 100644 --- a/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql +++ b/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql @@ -1,3 +1,22 @@ +CREATE OR REPLACE FUNCTION get_energy_consumption( + input_device_id UUID DEFAULT NULL, + input_start_date DATE DEFAULT NULL, + input_end_date DATE DEFAULT NULL, + input_hour INT DEFAULT NULL, + min_energy_kW INT DEFAULT NULL +) +RETURNS TABLE ( + device_id UUID, + date DATE, + hour INT, + energy_consumed_kW INT, + energy_consumed_A INT, + energy_consumed_B INT, + energy_consumed_C INT +) AS $$ +BEGIN +RETURN QUERY + WITH total_energy AS ( SELECT device_id, From eba3513e1403da665916077884e8b166617fbc19 Mon Sep 17 00:00:00 2001 From: Dona Maria Absi <49731027+DonaAbsi@users.noreply.github.com> Date: Wed, 16 Apr 2025 11:22:12 +0300 Subject: [PATCH 2/3] added params --- .../fact_hourly_energy_consumed.sql | 144 +++++++++--------- 1 file changed, 71 insertions(+), 73 deletions(-) diff --git a/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql b/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql index a3dd854..d2b46fe 100644 --- a/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql +++ b/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql @@ -1,90 +1,88 @@ -CREATE OR REPLACE FUNCTION get_energy_consumption( - input_device_id UUID DEFAULT NULL, - input_start_date DATE DEFAULT NULL, - input_end_date DATE DEFAULT NULL, - input_hour INT DEFAULT NULL, - min_energy_kW INT DEFAULT NULL -) -RETURNS TABLE ( - device_id UUID, - date DATE, - hour INT, - energy_consumed_kW INT, - energy_consumed_A INT, - energy_consumed_B INT, - energy_consumed_C INT -) AS $$ -BEGIN -RETURN QUERY +WITH params AS ( + SELECT + NULL::uuid AS device_id, -- filter: specific device (or NULL for all) + NULL::date AS start_date, -- filter: start date (or NULL for open range) + NULL::date AS end_date, -- filter: end date (or NULL for open range) + NULL::int AS hour, -- filter: hour of day (or NULL for all hours) + NULL::int AS min_kw -- filter: min kW consumed (or NULL for no filter) +), -WITH total_energy AS ( +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 + log.device_id, + log.event_time::date AS date, + EXTRACT(HOUR FROM log.event_time) AS hour, + MIN(log.value)::integer AS min_value, + MAX(log.value)::integer AS max_value + FROM "device-status-log" log, params + WHERE log.code = 'EnergyConsumed' + AND (params.device_id IS NULL OR log.device_id = params.device_id) + AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) + AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) + GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ), 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 + log.device_id, + log.event_time::date AS date, + EXTRACT(HOUR FROM log.event_time) AS hour, + MIN(log.value)::integer AS min_value, + MAX(log.value)::integer AS max_value + FROM "device-status-log" log, params + WHERE log.code = 'EnergyConsumedA' + AND (params.device_id IS NULL OR log.device_id = params.device_id) + AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) + AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) + GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ), 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 + log.device_id, + log.event_time::date AS date, + EXTRACT(HOUR FROM log.event_time) AS hour, + MIN(log.value)::integer AS min_value, + MAX(log.value)::integer AS max_value + FROM "device-status-log" log, params + WHERE log.code = 'EnergyConsumedB' + AND (params.device_id IS NULL OR log.device_id = params.device_id) + AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) + AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) + GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ), 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 + log.device_id, + log.event_time::date AS date, + EXTRACT(HOUR FROM log.event_time) AS hour, + MIN(log.value)::integer AS min_value, + MAX(log.value)::integer AS max_value + FROM "device-status-log" log, params + WHERE log.code = 'EnergyConsumedC' + AND (params.device_id IS NULL OR log.device_id = params.device_id) + AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) + AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) + GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ) 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; - + t.device_id, + t.date, + t.hour, + (t.max_value - t.min_value) AS energy_consumed_kW, + (a.max_value - a.min_value) AS energy_consumed_A, + (b.max_value - b.min_value) AS energy_consumed_B, + (c.max_value - c.min_value) AS energy_consumed_C +FROM total_energy t +JOIN energy_phase_A a ON t.device_id = a.device_id AND t.date = a.date AND t.hour = a.hour +JOIN energy_phase_B b ON t.device_id = b.device_id AND t.date = b.date AND t.hour = b.hour +JOIN energy_phase_C c ON t.device_id = c.device_id AND t.date = c.date AND t.hour = c.hour +JOIN params p ON TRUE +WHERE (p.min_kw IS NULL OR (t.max_value - t.min_value) >= p.min_kw) +ORDER BY t.device_id, t.date, t.hour; \ No newline at end of file From 25650ca91b5ba3c2038c480b6771f70f78d1e6e2 Mon Sep 17 00:00:00 2001 From: Dona Maria Absi <49731027+DonaAbsi@users.noreply.github.com> Date: Wed, 16 Apr 2025 12:14:38 +0300 Subject: [PATCH 3/3] adjusted params --- .../fact_hourly_energy_consumed.sql | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql b/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql index d2b46fe..9674d74 100644 --- a/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql +++ b/libs/common/src/sql/queries/fact_hourly_energy_consumed/fact_hourly_energy_consumed.sql @@ -1,8 +1,7 @@ WITH params AS ( SELECT - NULL::uuid AS device_id, -- filter: specific device (or NULL for all) - NULL::date AS start_date, -- filter: start date (or NULL for open range) - NULL::date AS end_date, -- filter: end date (or NULL for open range) + NULL::uuid AS device_id, -- filter: specific device (or NULL for all) + NULL::date AS input_date, -- filter: start date (or NULL for open range) -- filter: end date (or NULL for open range) NULL::int AS hour, -- filter: hour of day (or NULL for all hours) NULL::int AS min_kw -- filter: min kW consumed (or NULL for no filter) ), @@ -17,8 +16,8 @@ total_energy AS ( FROM "device-status-log" log, params WHERE log.code = 'EnergyConsumed' AND (params.device_id IS NULL OR log.device_id = params.device_id) - AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) - AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.input_date IS NULL OR log.event_time::date >= params.input_date) + AND (params.input_date IS NULL OR log.event_time::date <= params.input_date) AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ), @@ -33,8 +32,8 @@ energy_phase_A AS ( FROM "device-status-log" log, params WHERE log.code = 'EnergyConsumedA' AND (params.device_id IS NULL OR log.device_id = params.device_id) - AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) - AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.input_date IS NULL OR log.event_time::date >= params.input_date) + AND (params.input_date IS NULL OR log.event_time::date <= params.input_date) AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ), @@ -49,8 +48,8 @@ energy_phase_B AS ( FROM "device-status-log" log, params WHERE log.code = 'EnergyConsumedB' AND (params.device_id IS NULL OR log.device_id = params.device_id) - AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) - AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.input_date IS NULL OR log.event_time::date >= params.input_date) + AND (params.input_date IS NULL OR log.event_time::date <= params.input_date) AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) ), @@ -65,8 +64,8 @@ energy_phase_C AS ( FROM "device-status-log" log, params WHERE log.code = 'EnergyConsumedC' AND (params.device_id IS NULL OR log.device_id = params.device_id) - AND (params.start_date IS NULL OR log.event_time::date >= params.start_date) - AND (params.end_date IS NULL OR log.event_time::date <= params.end_date) + AND (params.input_date IS NULL OR log.event_time::date >= params.input_date) + AND (params.input_date IS NULL OR log.event_time::date <= params.input_date) AND (params.hour IS NULL OR EXTRACT(HOUR FROM log.event_time) = params.hour) GROUP BY log.device_id, log.event_time::date, EXTRACT(HOUR FROM log.event_time) )