97 lines
6.5 KiB
SQL
97 lines
6.5 KiB
SQL
with ref_week (week) as (values ('202349')),
|
|
master as (select datetime
|
|
, date
|
|
, yearweek
|
|
, n.site_id
|
|
, n.ne_id
|
|
, n.cell_name as cellname
|
|
, n.cell as ci
|
|
, ndp(num_dl_prb_utilization_percent, denum_dl_prb_utilization_percent) as prbdl
|
|
, case when ndp(num_dl_prb_utilization_percent, denum_dl_prb_utilization_percent) >= 90 then 'High' else 'Low' end as flag
|
|
from r11.meas_4g_hourly m
|
|
join network_cell n on m.network_cell_id = n.id
|
|
where date between date_from((select week from ref_week limit 1))
|
|
and date_to((select week from ref_week limit 1))
|
|
and n.site_id in ('NTK067', 'NTK068')),
|
|
master_counting as (select yearweek as week, date, site_id, cellname, ci, count(*) as count, avg(prbdl) as prbdl
|
|
from master
|
|
where flag = 'High'
|
|
group by yearweek, date, site_id, cellname, ci
|
|
|
|
union
|
|
|
|
select yearweek as week, date, site_id, cellname, ci, count(*) as count, avg(prbdl) as prbdl
|
|
from master
|
|
where flag = 'Low'
|
|
group by yearweek, date, site_id, cellname, ci),
|
|
master_unique as (select step2.week
|
|
, dl.date
|
|
, step2.site_id
|
|
, step2.cellname
|
|
, step2.ci
|
|
from w dl,
|
|
(select week, site_id, cellname, ci
|
|
from master_counting
|
|
group by week, site_id, cellname, ci) step2
|
|
where dl.week = (select week from ref_week limit 1)),
|
|
master_combine as (select mu.week
|
|
, mu.date
|
|
, mu.site_id
|
|
, mu.cellname
|
|
, mu.ci
|
|
, case when mc.count is null then 0 else mc.count end count
|
|
, mc.prbdl
|
|
from master_unique mu
|
|
left join master_counting mc
|
|
on mu.week = mc.week
|
|
and mu.date = mc.date
|
|
and mu.site_id = mc.site_id
|
|
and mu.cellname = mc.cellname
|
|
order by mu.cellname, mu.date),
|
|
master_agg as (select week, site_id, cellname, ci, string_agg(count::text, ',' order by date) as count, avg(prbdl) as avg_prbdl
|
|
from master_combine
|
|
group by week, site_id, cellname, ci),
|
|
result as (select week
|
|
|
|
, site_id
|
|
, cellname
|
|
, ci
|
|
|
|
, avg_prbdl
|
|
|
|
, split_part(count, ',', 1) as date1_count
|
|
, split_part(count, ',', 2) as date2_count
|
|
, split_part(count, ',', 3) as date3_count
|
|
, split_part(count, ',', 4) as date4_count
|
|
, split_part(count, ',', 5) as date5_count
|
|
, split_part(count, ',', 6) as date6_count
|
|
, split_part(count, ',', 7) as date7_count
|
|
, case when split_part(count, ',', 1)::integer >= 8 then 'High' else 'Low' end as date1_status
|
|
, case when split_part(count, ',', 2)::integer >= 8 then 'High' else 'Low' end as date2_status
|
|
, case when split_part(count, ',', 3)::integer >= 8 then 'High' else 'Low' end as date3_status
|
|
, case when split_part(count, ',', 4)::integer >= 8 then 'High' else 'Low' end as date4_status
|
|
, case when split_part(count, ',', 5)::integer >= 8 then 'High' else 'Low' end as date5_status
|
|
, case when split_part(count, ',', 6)::integer >= 8 then 'High' else 'Low' end as date6_status
|
|
, case when split_part(count, ',', 7)::integer >= 8 then 'High' else 'Low' end as date7_status
|
|
, case when split_part(count, ',', 1)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 2)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 3)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 4)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 5)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 6)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 7)::integer >= 8 then 1 else 0 end as total_count
|
|
, case
|
|
when (case when split_part(count, ',', 1)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 2)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 3)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 4)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 5)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 6)::integer >= 8 then 1 else 0 end +
|
|
case when split_part(count, ',', 7)::integer >= 8 then 1 else 0 end) >= 3
|
|
then 'High Util'
|
|
else 'Low Util' end as final
|
|
from master_agg
|
|
order by cellname)
|
|
select *
|
|
from result
|
|
order by week, cellname |