Sql 获取Oracle中时间段的平均值

Sql 获取Oracle中时间段的平均值,sql,oracle,average,Sql,Oracle,Average,我有一张桌子,里面有大量的数据。每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

我有一张桌子,里面有大量的数据。每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个值。有办法做到这一点吗

select trunc(eventdate, 'DD'), avg(cpu)
from tab where eventdate >= trunc(sysdate) - 30
group by trunc(eventdate, 'DD') 
order by 1;
trunceventdate,“DD”从事件日期中删除时间。按此表达式分组时,Oracle会计算每天的平均ofr

如果您想显示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;

我相信有一种方法,Oracle有很多小功能。。。到目前为止,查得到了什么?我不确定我是否理解。在EVENTDATE列中,您有事件的日期,然后您想在两个日期之间取一个间隔,并计算哪一列中的列平均值的平均值?CPU?正确-必须计算CPU