-1

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)作为结束和difference(max(dat)-min(dat)每一天

这里存在 3 个不同的日期,因此它应该返回 3 条记录以及上述列。

请给出一些方法来获得这个。

4

2 回答 2

2

只需减去它们:max(dat) - min(dat)

SELECT empid,
       min(dat) as strt,
       max(dat) as end,
       max(dat) - min(dat) as diff
FROM the_table
GROUP BY empid;

如果您想按天而不是 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)
于 2012-04-25T11:30:00.753 回答
1

Oracle 中的日期算术非常简单:两个日期之间的差作为天数返回。小于一天的值将返回为 *decimals"。也就是说,75 分钟是 1.25 小时而不是 1.15。如果你想要它作为小时和分钟,你需要使用间隔

内部查询计算每个员工每天的最小和最大数据之间的差异,并将其转换为 DAY 间隔。外部查询从该间隔中提取 HOUR 和 MINUTES。

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)
)
于 2012-05-02T10:53:03.007 回答