DatabaseCreation: 15 Network outage operations.sql

File 15 Network outage operations.sql, 1.7 KB (added by 231139, 10 days ago)
Line 
1DROP VIEW IF EXISTS public.v_network_outage_operations;
2
3CREATE VIEW public.v_network_outage_operations AS
4WITH assignment_summary AS (
5 SELECT outage_id,
6 COUNT(*) AS assignment_count,
7 COUNT(*) FILTER (WHERE assignment_type = 'outage_lead') AS lead_assignments,
8 COUNT(*) FILTER (WHERE assignment_type = 'field_support') AS field_assignments,
9 MIN(start_time) AS first_assignment_at,
10 MAX(end_time) AS last_assignment_end
11 FROM public.employee_assignments
12 WHERE outage_id IS NOT NULL
13 GROUP BY outage_id
14)
15SELECT
16 o.outage_id,
17 ns.site_id,
18 ns.site_code,
19 ns.site_name,
20 ns.region,
21 o.outage_type,
22 o.status,
23 o.start_time,
24 o.end_time,
25 CASE WHEN o.end_time IS NOT NULL
26 THEN ROUND(EXTRACT(EPOCH FROM (o.end_time - o.start_time))::numeric / 60.0, 2)
27 END AS outage_duration_minutes,
28 CASE
29 WHEN o.end_time IS NULL THEN 'open'
30 WHEN o.end_time - o.start_time <= INTERVAL '60 minutes' THEN 'under_1_hour'
31 WHEN o.end_time - o.start_time <= INTERVAL '4 hours' THEN 'one_to_four_hours'
32 ELSE 'over_4_hours'
33 END AS duration_band,
34 o.root_cause,
35 na.alarm_id,
36 na.alarm_type,
37 na.severity AS alarm_severity,
38 na.raised_at AS alarm_raised_at,
39 COALESCE(ass.assignment_count, 0) AS assignment_count,
40 COALESCE(ass.lead_assignments, 0) AS lead_assignments,
41 COALESCE(ass.field_assignments, 0) AS field_assignments,
42 ass.first_assignment_at,
43 ass.last_assignment_end
44FROM public.outages o
45JOIN public.network_sites ns ON ns.site_id = o.site_id
46LEFT JOIN public.network_alarms na ON na.alarm_id = o.alarm_id
47LEFT JOIN assignment_summary ass ON ass.outage_id = o.outage_id;
48