Sql Oracle两个日期字段之间的平均差异

Sql Oracle两个日期字段之间的平均差异,sql,database,oracle,plsql,rdbms,Sql,Database,Oracle,Plsql,Rdbms,我在数据库中有这样一个表: unit arrival_date departure_date ---- ------------- -------------- 1 27/1/2017 08:01:20 a. m. 27/1/2017 08:04:27 a. m. 1 27/1/2017 08:05:35 a. m. 27/1/2017 08:09:28 a. m. 我需要计算用户到达日期和离开日期之间的平均时间差,并以

我在数据库中有这样一个表:

unit arrival_date               departure_date
---- -------------              --------------
1    27/1/2017 08:01:20 a. m.   27/1/2017 08:04:27 a. m.
1    27/1/2017 08:05:35 a. m.   27/1/2017 08:09:28 a. m.
我需要计算用户到达日期和离开日期之间的平均时间差,并以小时、分钟、秒格式(HH:MI:SS)显示结果

如果我做了这个
到达日期-离开日期
我在几天内就得到了结果,但我正努力在小时、分钟和秒内得到平均值

这些字段是
日期
字段,而不是
时间戳
字段

提前感谢。

这里有一个例子

select unit, avg(departure_date - arrival_date) as avg_date
from mytable
减去两个日期数据类型值时,结果是天数。它显示
INTER
CTE。将其乘以24(一天中的小时数)、60(一小时中的分钟数)和60(一分钟中的秒数),结果是秒数(
DIFF_SECS

平均值
CTE显示如何将
AVG
函数应用于先前的结果;在这方面没有什么特别的,只要注意你必须通过
UNIT
GROUP
it

最后,将
TO_CHAR
格式应用于计算(一些
TRUNC
MOD
调用,以便从
AVG_DIFF_SECS
值中提取小时、分钟和秒数)

我建议您一步一步地单独运行每个CTE,以便更轻松地跟踪执行。希望能有帮助

SQL> with test (unit, arr, dep) as
  2    (select 1, to_date('27.01.2017 08:01:20', 'dd.mm.yyyy hh24:mi:ss'),
  3               to_date('27.01.2017 08:04:27', 'dd.mm.yyyy hh24:Mi:ss')
  4     from dual union all
  5     select 1, to_date('27.01.2017 08:05:35', 'dd.mm.yyyy hh24:mi:ss'),
  6               to_date('27.01.2017 08:09:28', 'dd.mm.yyyy hh24:Mi:ss')
  7     from dual
  8    ),
  9  inter as
 10    (select unit, (dep - arr) diff_days,
 11       (dep - arr) * 24 * 60 * 60 diff_secs
 12     from test
 13    ),
 14  averages as
 15    (select unit,
 16       avg(dep - arr) avg_diff_days,
 17       avg((dep - arr) * 24 * 60 * 60) avg_diff_secs
 18     from test
 19     group by unit
 20    )
 21  select
 22    to_char(trunc(avg_diff_secs / 3600), 'fm00') || ':' ||           -- hours
 23    to_char(trunc(mod(avg_diff_secs , 3600) / 60), 'fm00') || ':' || -- minutes
 24    to_char(mod(avg_diff_secs, 60), 'fm00')                          -- seconds
 25    avg_diff_formatted
 26  from averages;

AVG_DIFF_FORMATTED
--------------------
00:03:30

SQL>

执行查询并让我知道???我觉得这个答案不错。