我有这个表可以容纳大量数据。每隔5分钟将插入带有数据的新SQL查询。
EVENTID EVENTDATE CPU
--------- --------------------- --------
23523 2014-10-28 20:26:51 33
2234234 2014-10-28 20:27:05 22
234 2014-10-28 20:27:19 234
22 2014-10-28 20:27:29 22
234 2014-10-28 20:30:13 234
234 2014-10-28 20:38:18 23234
234 2014-10-28 21:50:06 234
234 2014-10-28 20:41:51 12312
234 2014-09-30 23:00:34 123
234 2014-11-28 21:18:23 234
234 2014-10-30 21:24:28 234
234 2014-10-29 21:27:52 23434
我想在图表中显示数据30天。但我有两个问题。
我想用30个值将所有数据的平均值显示在表中。
首先,我需要获得每个时间间隔的平均值。其次,我想将结果限制为30个值。有没有办法做到这一点?
答案 0 :(得分:1)
select trunc(eventdate, 'DD'), avg(cpu)
from tab where eventdate >= trunc(sysdate) - 30
group by trunc(eventdate, 'DD')
order by 1;
trunc(eventdate, 'DD')
从eventdate中删除时间。当您按此表达式进行分组时,Oracle会每天计算平均值。
如果你想要显示30行,你可以创建一个带有一些特殊查询的连接,返回结果日期:
select start_date, avg(cpu)
from (select start_date + lvl start_date, start_date + lvl + 1 - 1/24/60/60 end_date
from (select trunc(sysdate-30) start_date, level lvl from dual connect by level <= 30))
left join tab on eventdate between start_date and end_date
group by start_date
order by 1;