diff --git a/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_insert_all_daily_spacy_occupancy_duration.sql b/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_insert_all_daily_spacy_occupancy_duration.sql index 10e03df..9c3315f 100644 --- a/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_insert_all_daily_spacy_occupancy_duration.sql +++ b/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_insert_all_daily_spacy_occupancy_duration.sql @@ -90,6 +90,7 @@ occupied_seconds_per_day AS ( , final_data as ( SELECT space_id, event_date, + total_occupied_seconds, occupancy_prct FROM occupied_seconds_per_day ORDER BY 1,2 @@ -98,12 +99,17 @@ ORDER BY 1,2 INSERT INTO public."space-daily-occupancy-duration" ( space_uuid, event_date, + occupied_seconds, occupancy_percentage ) select space_id, event_date, + total_occupied_seconds, occupancy_prct FROM final_data ON CONFLICT (space_uuid, event_date) DO UPDATE SET - occupancy_percentage = EXCLUDED.occupancy_percentage; \ No newline at end of file + occupancy_percentage = EXCLUDED.occupancy_percentage; + + + \ No newline at end of file diff --git a/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_select_daily_space_occupancy_duration.sql b/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_select_daily_space_occupancy_duration.sql index 115caec..6cbf98e 100644 --- a/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_select_daily_space_occupancy_duration.sql +++ b/libs/common/src/sql/procedures/fact_daily_space_occupancy_duration/procedure_select_daily_space_occupancy_duration.sql @@ -1,15 +1,26 @@ WITH params AS ( SELECT $1::uuid AS space_uuid, - TO_DATE(NULLIF($2, ''), 'YYYY-MM-DD') AS event_date + TO_DATE(NULLIF($2, ''), 'YYYY-MM') AS event_month ) -SELECT sdod.* -FROM public."space-daily-occupancy-duration" AS sdod -JOIN params P ON true -WHERE sdod.space_uuid = P.space_uuid -AND ( - P.event_year IS NULL - OR sdod.event_date = P.event_year +, step1 AS ( + SELECT + space_uuid, + TO_CHAR(event_date, 'YYYY-MM') AS event_month, + DATE_PART('day', (date_trunc('month', event_date) + INTERVAL '1 month - 1 day')) AS days_in_month, + SUM(occupied_seconds) AS occupied_seconds + FROM public."space-daily-occupancy-duration" AS sdod + GROUP BY space_uuid, event_month, days_in_month ) -ORDER BY space_uuid, event_date; + +SELECT + step1.space_uuid, + step1.event_month, + occupied_seconds / (days_in_month * 86400.0) * 100 AS occupancy_percentage +FROM step1 +JOIN params P ON step1.space_uuid = P.space_uuid +WHERE P.event_month IS NULL + OR step1.event_month = TO_CHAR(P.event_month, 'YYYY-MM') +ORDER BY step1.space_uuid, step1.event_month; +