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>
执行查询并让我知道???我觉得这个答案不错。