zquery/V1/Request/PUMA/Dito/weekly_util_cell.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