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 9674d74..5b992de 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,7 +1,9 @@ WITH params AS ( SELECT 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::date AS input_date, -- filter: start date (or NULL for open range) + NULL::text AS event_month, -- filter: MM-YYYY (or NULL for all) + NULL::int AS event_year, -- filter: YYYY (or NULL for all) 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) ), @@ -11,6 +13,8 @@ total_energy AS ( log.device_id, log.event_time::date AS date, EXTRACT(HOUR FROM log.event_time) AS hour, + TO_CHAR(log.event_time, 'MM-YYYY') AS event_month, + EXTRACT(YEAR FROM log.event_time)::int AS event_year, MIN(log.value)::integer AS min_value, MAX(log.value)::integer AS max_value FROM "device-status-log" log, params @@ -19,7 +23,7 @@ total_energy AS ( 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) + GROUP BY 1,2,3,4,5 ), energy_phase_A AS ( @@ -35,7 +39,7 @@ energy_phase_A AS ( 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) + GROUP BY 1,2,3 ), energy_phase_B AS ( @@ -51,7 +55,7 @@ energy_phase_B AS ( 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) + GROUP BY 1,2,3 ), energy_phase_C AS ( @@ -67,12 +71,14 @@ energy_phase_C AS ( 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) + GROUP BY 1,2,3 ) SELECT t.device_id, t.date, + t.event_year, + t.event_month, t.hour, (t.max_value - t.min_value) AS energy_consumed_kW, (a.max_value - a.min_value) AS energy_consumed_A, @@ -84,4 +90,4 @@ JOIN energy_phase_B b ON t.device_id = b.device_id AND t.date = b.date AND t.hou 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 +ORDER BY 1,2; \ No newline at end of file