Sql 使用百分比聚合每天的小时数据
基于以下数据,我们如何将CPU空闲和使用的百分比转换为一天的总和 例如,我正在寻找聚合状态,以显示2015年6月18日这一天的CPU利用率为97%空闲和10%忙,2015年6月19日这一天的CPU利用率为80%空闲和20%忙。。。等等Sql 使用百分比聚合每天的小时数据,sql,oracle,Sql,Oracle,基于以下数据,我们如何将CPU空闲和使用的百分比转换为一天的总和 例如,我正在寻找聚合状态,以显示2015年6月18日这一天的CPU利用率为97%空闲和10%忙,2015年6月19日这一天的CPU利用率为80%空闲和20%忙。。。等等 18-JUN-15 05.00.15.571 AM 98.75 .69 .55 .01
18-JUN-15 05.00.15.571 AM 98.75 .69 .55 .01
18-JUN-15 06.00.18.183 AM 98.37 1 .63 .01
18-JUN-15 07.00.03.804 AM 97.67 1.56 .76 .01
18-JUN-15 08.00.07.987 AM 97.78 1.46 .75 .01
18-JUN-15 09.00.00.707 AM 97.8 1.44 .75 .01
18-JUN-15 10.00.03.628 AM 97.06 2.09 .84 .01
18-JUN-15 11.00.06.660 AM 97.92 1.36 .71 .01
18-JUN-15 12.00.09.538 PM 97.93 1.34 .72 0
18-JUN-15 01.00.12.455 PM 97.95 1.31 .73 .01
18-JUN-15 02.00.15.177 PM 97.92 1.34 .73 .01
18-JUN-15 03.00.17.829 PM 98.11 1.18 .7 .01
18-JUN-15 04.00.20.657 PM 98.58 .82 .59 .01
18-JUN-15 05.00.23.284 PM 94.32 4.29 1.38 .01
18-JUN-15 06.00.26.366 PM 91.97 6.38 1.64 .01
18-JUN-15 07.00.30.108 PM 98.51 .88 .6 .01
18-JUN-15 08.00.34.282 PM 98.78 .67 .55 .01
18-JUN-15 09.00.02.411 PM 96.39 3.01 .59 .01
18-JUN-15 10.00.05.019 PM 97.91 1.53 .55 .01
18-JUN-15 11.00.07.827 PM 98.64 .79 .56 .01
19-JUN-15 12.00.10.329 AM 98.07 1.27 .65 0
19-JUN-15 01.00.12.954 AM 98.65 .79 .56 0
19-JUN-15 02.00.15.499 AM 96.9 2.23 .86 .01
19-JUN-15 03.00.18.041 AM 98.75 .68 .57 .01
19-JUN-15 04.00.01.618 AM 98.72 .71 .56 .01
19-JUN-15 05.00.05.221 AM 98.73 .7 .56 .01
19-JUN-15 06.00.08.719 AM 98.48 .91 .61 .01
19-JUN-15 07.00.12.035 AM 97.39 1.79 .81 .01
19-JUN-15 08.00.14.827 AM 97.42 1.76 .81 .01
19-JUN-15 09.00.17.804 AM 97.4 1.76 .83 .01
19-JUN-15 10.00.20.560 AM 97.98 1.29 .72 .01
19-JUN-15 11.00.02.756 AM 98.07 1.23 .7 .01
19-JUN-15 12.00.07.015 PM 98.1 1.2 .7 .01
19-JUN-15 01.00.10.953 PM 98.03 1.24 .72 .01
19-JUN-15 02.00.15.406 PM 97.84 1.42 .73 .01
19-JUN-15 03.00.19.628 PM 98.03 1.25 .72 .01
19-JUN-15 04.00.24.111 PM 98.56 .83 .6 .01
19-JUN-15 05.00.28.252 PM 94.54 4.13 1.33 0
19-JUN-15 06.00.32.564 PM 89.79 8.2 2 .01
19-JUN-15 07.00.01.336 PM 98.6 .8 .59 .01
19-JUN-15 08.00.05.105 PM 98.76 .68 .55 .01
19-JUN-15 09.00.07.931 PM 96.08 3.29 .62 .01
19-JUN-15 10.00.10.508 PM 97.87 1.57 .56 .01
这将仅在上午9点到下午5点之间累积每天的空闲时间。16与24小时时间格式的下午5点以下相同
Select TRUNC(BEGIN_INTERVAL_TIME) as BEGIN_DATE,
AVG(IDLE_TIME) as AVG_IDLE_TIME
From tbl
Where TO_CHAR(BEGIN_INTERVAL_TIME, 'HH24') Between 9 and 16
Group by TRUNC(BEGIN_INTERVAL_TIME)
基本总量如相关问题所示:
select trunc(begin_interval_time) as day,
avg(idle_time) as avg_idle,
100 - avg(idle_time) as avg_busy
from your_table
group by trunc(begin_interval_time)
order by trunc(begin_interval_time);
DAY AVG_IDLE AVG_BUSY
---------- ---------- ----------
2015-06-18 97.4926316 2.50736842
2015-06-19 97.5113043 2.48869565
这将“忙碌”视为空闲的对立面;您可以将其他三个值相加:
avg(user_time + sys_time + iowait_time) as avg_busy
但这两个值加起来通常不会精确到100,因为值的精度不够高
假设“上午9点到下午5点之间”是指从09:00:00.000到16:59:59.999,您可以只筛选9到16之间的时间:
select trunc(begin_interval_time) as day,
avg(idle_time) as avg_idle,
100 - avg(idle_time) as avg_busy
from your_table
where extract(hour from begin_interval_time) between 9 and 16
group by trunc(begin_interval_time)
order by trunc(begin_interval_time);
DAY AVG_IDLE AVG_BUSY
---------- ---------- ----------
2015-06-18 97.90875 2.09125
2015-06-19 98.00125 1.99875
如果您想查看工作时间和非工作时间,可以使用case表达式:
select trunc(begin_interval_time) as day,
avg(case when extract(hour from begin_interval_time)
between 9 and 16 then idle_time end) as avg_idle_work,
100 - avg(case when extract(hour from begin_interval_time)
between 9 and 16 then idle_time end) as avg_busy_work,
avg(case when extract(hour from begin_interval_time)
not between 9 and 16 then idle_time end) as avg_idle_non_work,
100 - avg(case when extract(hour from begin_interval_time)
not between 9 and 16 then idle_time end) as avg_busy_non_work
from your_table
group by trunc(begin_interval_time)
order by trunc(begin_interval_time);
DAY AVG_IDLE_WORK AVG_BUSY_WORK AVG_IDLE_NON_WORK AVG_BUSY_NON_WORK
---------- ------------- ------------- ----------------- -----------------
2015-06-18 97.90875 2.09125 97.19 2.81
2015-06-19 98.00125 1.99875 97.25 2.75
如果这不是工作时间的真正含义,您可以修改extract()
调用,将其拆分到需要的任何位置
您可能希望在计算过程中稍微调整时间,具体取决于时间戳所代表的内容;e、 g.截断到小时水平,然后可能减去一小时。这取决于说“19-JUN-15 12.00.10.329 AM”是否算在18或19号。如果你只关注工作时间,这可能无关紧要,而且你可能根本不在乎……只要抛出一个数字,空闲时间的平均值可能是97%?不要只关注按天分组的列的平均值(缩短的间隔时间)?或者调整一个小时,取决于时间代表什么和你想看什么?是的,这是可能的。你能分享一下sql应该是什么样子吗?我可能需要修改它来区分营业时间和非营业时间。@ USE1595858 -什么?绝对是我需要的。我找到了一个警告,它也把周末当作工作日。如果您使用的是第二个查询,那么在一周中的某一天添加一个过滤器就很容易了(记住NLS设置;D元素根据您所在的位置而变化,使用DY或day需要指定语言)。如果使用第三个,可以将其合并到case表达式中,这会有点混乱。但是,这只适用于周末,而不适用于节假日——通常有一个查找表来识别这些假期。