sql – 如何平均时间间隔?

在Oracle 10g中,我有一个表格,其中显示了某些操作花费多长时间的时间戳.它有两个时间戳字段:starttime和endtime.我想找到这些时间戳给出的持续时间的平均值.我试试:
select avg(endtime-starttime) from timings;

但得到:

sql Error: ORA-00932: inconsistent
datatypes: expected NUMBER got
INTERVAL DAY TO SECOND

这样做:

select
     avg(extract( second from  endtime - starttime) +
        extract ( minute from  endtime - starttime) * 60 +
        extract ( hour   from  endtime - starttime) * 3600) from timings;

但真的很慢

任何更好的方式将间隔转换成秒数,还是其他方法呢?

编辑:
事实上,这是真的放慢了这个事实,我在开始之前有一些结束时间.由于某种原因使得该计算变得非常缓慢.我的根本问题是通过从查询集中消除它们来解决.我也只是定义了一个功能来做这个转换更容易:

FUNCTION fn_interval_to_sec ( i IN INTERVAL DAY TO SECOND )
RETURN NUMBER
IS
  numSecs NUMBER;
BEGIN
  numSecs := ((extract(day from i) * 24
         + extract(hour from i) )*60
         + extract(minute from i) )*60
         + extract(second from i);
  RETURN numSecs;
END;

解决方法

最干净的方法是编写自己的聚合函数来执行此操作,因为它将最干净地处理这个(处理子秒分辨率等).

事实上,这个问题在asktom.oracle.com一回((包括代码))提出(并回答).

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...