我的表名为Record,其中包含以下列,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条带有上述列的记录。
请提供一些方法来解决这个问题。
答案 0 :(得分: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)
答案 1 :(得分:1)
Oracle中的日期算术非常简单:两个日期之间的差异将作为天数返回。小于一天的值将返回*小数“。也就是说,75分钟是1.25小时而不是1.15。如果您希望将其作为小时和分钟,则需要使用interval。
内部查询计算每个员工每天的最小和最大数据之间的差异,并将其转换为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)
)