Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何找出两个时间戳列之间的差异_Oracle_Date Arithmetic - Fatal编程技术网

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)
)