Advanced: 06 Sector traffic map.sql

File 06 Sector traffic map.sql, 2.0 KB (added by 231139, 10 days ago)
Line 
1-- CDR activity summarized per map polygon without multiplying event rows.
2-- QGIS polygon layer. Unique key: coverage_zone_id; geometry: coverage_area.
3CREATE OR REPLACE VIEW public.v_sector_traffic_map AS
4WITH call_stats AS
5(
6 SELECT
7 sector_id,
8 count(*) AS call_count,
9 coalesce(sum(duration_seconds), 0) AS call_seconds,
10 max(event_start_time) AS last_call_at
11 FROM public.usage_cdr_calls
12 WHERE sector_id IS NOT NULL
13 GROUP BY sector_id
14),
15sms_stats AS
16(
17 SELECT
18 sector_id,
19 count(*) AS sms_count,
20 max(event_time) AS last_sms_at
21 FROM public.usage_cdr_sms
22 WHERE sector_id IS NOT NULL
23 GROUP BY sector_id
24),
25data_stats AS
26(
27 SELECT
28 sector_id,
29 count(*) AS data_session_count,
30 coalesce(sum(data_used_mb), 0) AS data_used_mb,
31 max(session_start) AS last_data_at
32 FROM public.usage_cdr_data
33 WHERE sector_id IS NOT NULL
34 GROUP BY sector_id
35)
36SELECT
37 coverage.coverage_zone_id,
38 coverage.site_id,
39 coverage.site_code,
40 coverage.site_name,
41 coverage.region,
42 coverage.tower_id,
43 coverage.tower_code,
44 coverage.sector_id,
45 coverage.sector_label,
46 coverage.technology_name,
47 coverage.generation,
48 coalesce(calls.call_count, 0) AS call_count,
49 coalesce(calls.call_seconds, 0) AS call_seconds,
50 coalesce(messages.sms_count, 0) AS sms_count,
51 coalesce(data_usage.data_session_count, 0) AS data_session_count,
52 coalesce(data_usage.data_used_mb, 0) AS data_used_mb,
53 coalesce(calls.call_count, 0)
54 + coalesce(messages.sms_count, 0)
55 + coalesce(data_usage.data_session_count, 0) AS total_events,
56 greatest(calls.last_call_at, messages.last_sms_at, data_usage.last_data_at)
57 AS last_event_at,
58 coverage.coverage_area
59FROM public.v_network_coverage_map coverage
60LEFT JOIN call_stats calls ON calls.sector_id = coverage.sector_id
61LEFT JOIN sms_stats messages ON messages.sector_id = coverage.sector_id
62LEFT JOIN data_stats data_usage ON data_usage.sector_id = coverage.sector_id;