oralce不能直接对date类型使用avg函数,但是支持日期类型的加减运算。
如果每天某个时间点发生一个事件,需要求这个事件发生在一天中的均值,则可以通过下属方法计算
日期相减得到一个以天为单位的数值,基于此,通过下属步骤求得平均值:
1、to_date(to_char(tm,'yyyymmdd'),'yyyymmdd')获得当前记录所在日期的零点时间,
2、tm - to_date(to_char(tm,'yyyymmdd'),'yyyymmdd')则得到当前记录相对零点钟经历的时间,
3、avg( tm - to_date(to_char(tm,'yyyymmdd'),'yyyymmdd') )就得到了所有记录的平均时间点
4、avg( tm - to_date(to_char(tm,'yyyymmdd'),'yyyymmdd') ) + to_date('20180101','yyyymmdd'),20180101根据需要,可以随便设置,仅用于方便将平均时间点展现出来。
select avg( tm - to_date(to_char(tm,'yyyymmdd'),'yyyymmdd') ) + to_date('20180101','yyyymmdd') from (
select to_date('20181017 10:50','yyyymmdd hh24:mi') tm from dual
union
select to_date('20181017 11:30','yyyymmdd hh24:mi') tm from dual
)