Oracle 如何找出两个时间戳列之间的差异
我有一个表名记录,它有以下列,Oracle 如何找出两个时间戳列之间的差异,oracle,date-arithmetic,Oracle,Date Arithmetic,我有一个表名记录,它有以下列,Empid在数字列中,dat在时间戳中 其中有以下值 empid dat ====== ==== 101 4/9/2012 9:48:54 AM 101 4/9/2012 9:36:28 AM 101 4/9/2012 6:16:28 PM 101 4/10/2012 9:33:48 AM 101 4/10/2012 12:36:28 PM 101 4/10/2012 8:36:12 PM 101
Empid
在数字列中,dat
在时间戳中
其中有以下值
empid dat
====== ====
101 4/9/2012 9:48:54 AM
101 4/9/2012 9:36:28 AM
101 4/9/2012 6:16:28 PM
101 4/10/2012 9:33:48 AM
101 4/10/2012 12:36:28 PM
101 4/10/2012 8:36:12 PM
101 4/11/2012 9:36:28 AM
101 4/11/2012 4:36:22 PM
这里我需要显示以下列
empid
,min(dat)
作为开始,max(dat)
作为结束,每天的差值(max(dat)-min(dat)
这里有3个不同的日期,所以它应该返回3条带有上述列的记录
请给出一些方法。只需减去它们:
max(dat)-min(dat)
如果要按天分组,而不是按empid分组,请使用以下方法:
select trunc(dat),
min(dat) as strt,
max(dat) as end,
max(dat) - min(dat) as diff
from the_table
group by trunc(dat)
在Oracle中,日期算法非常简单:两个日期之间的差值以天数的形式返回。少于一天的值以*小数的形式返回。也就是说,75分钟是1.25小时,而不是1.15小时。如果您希望以小时和分钟的形式返回,则需要使用 内部查询计算每个员工每天的最小和最大数据之间的差异,并将其转换为一天的间隔。外部查询从该间隔中提取小时和分钟
select empid
, tday
, sdt
, edt
, extract(hour from diff) diff_hours
, extract (minute from diff) diff_minutes
from (
select empid
, trunc(dat) tday
, min(dat) sdt
, max(dat) edt
, numtodsinterval(max(dat) - min(dat), 'DAY') diff
from t42
group by empid, trunc(dat)
)
很抱歉,它显示了以下错误,ORA-00923 From关键字未按预期找到。缺少
,
。已修复。@Gurujothi.D上面的答案有一个轻微的语法错误,但您至少可以尝试更正它?嗨,Sathya,谢谢您的回复,但您的代码似乎只显示了最小值(dat)和最大值的一个输出(dat)从整个记录来看,实际上我的表包含3000行,例如,如果日期为2012年12月4日,则同一日期将有许多时间/日期,从中必须找出最小值和最大值,并计算差异。请就此联系我。谢谢。@Gurujothi.D:它将显示最早和最晚的数据p之间的差异er empid。这就是分组方式的工作原理。如果你想要不同的东西,你必须在你的问题中更加详细。
select empid
, tday
, sdt
, edt
, extract(hour from diff) diff_hours
, extract (minute from diff) diff_minutes
from (
select empid
, trunc(dat) tday
, min(dat) sdt
, max(dat) edt
, numtodsinterval(max(dat) - min(dat), 'DAY') diff
from t42
group by empid, trunc(dat)
)