Oracle SQL-从午夜两边的日期时间字段中查找平均时间

时间:2019-07-11 15:42:02

标签: sql oracle

第一次发布问题,如果不清楚,请您道歉。

我想根据生成日期时间字段与业务日期相比,找到文件的平均传送时间。我的问题是文件可能在午夜之前或之后交付,这超出了我的平均水平。

这是我正在测试的数据集;

select ID, business_date, generation_date
from table
where business_date >= to_date('20190705','yyyyMMdd hh24mi') and
      subscription_id = 'Report 1'

ID  BUSINESS_DATE   GENERATION_DATE
Report 1    09/07/2019  09/07/2019 23:02
Report 1    08/07/2019  09/07/2019 01:10
Report 1    05/07/2019  05/07/2019 20:58
Report 1    10/07/2019  10/07/2019 21:54

第二行的generation_date是午夜之后,因此当我尝试以下代码时,它给出的平均值不正确。

select id, 
to_char(trunc(sysdate) + 
               avg(cast(generation_date as date) - cast(trunc(generation_date) as date))
               , 'hh24mi') as ""Average_Delivery_Time""
from table
where a.business_date >= to_date('20190705','yyyyMMdd hh24mi')
and id = 'Report 1'
group by id

ID  Average_Delivery_Time
Report 1    16:46:27

我已经考虑过将日期和时间分开,然后根据business_date进行一些计算,但是我确信必须有一种更好的方法来找到平均时间(考虑不同的日期)。

正确的平均时间:22:46:26

任何有关如何在SQL中执行此操作的帮助将不胜感激。

见上文

见上文

1 个答案:

答案 0 :(得分:1)

这是您想要的吗?

avg(generation_date - trunc(business_date))

我不确定为什么要将日期日期转换为date