TableName:TimeLog
TimeLogID | EmployeeID | TimeLog
------------------------------------------
1 | 1 | 1/1/2013 11:00 PM
2 | 1 | 1/2/2013 07:00 AM
3 | 1 | 1/2/2013 11:00 PM
4 | 1 | 1/3/2013 07:00 AM
TableName:Schedule
ScheduleID | EmployeeID | TimeIN | TimeOUT
----------------------------------------------
1 | 1 | 11:00 PM | 07:00 AM
我的问题是如何计算员工花费的时间,因为他或她在晚上11点开始工作,最后在早上7点结束。希望有人可以帮我解决这个问题。感谢。
基本上,我需要每个工作日的工作时间。
答案 0 :(得分:1)
您可以使用此查询
select
e.TimeLogID,
e.EmployeeID,
ifnull(TIMESTAMPDIFF(HOUR,e.TimeLog,la.TimeLog),0) as timediff
from emp_time as e
left join (
select
*
from emp_time
) as la on la.TimeLogID = (
select
min(TimeLogID )
from emp_time
where TimeLogID > e.TimeLogID
limit 1
);
输出
TimeLogID EmployeeID timediff
1 1 20
2 1 4
3 1 20
4 1 0
答案 1 :(得分:1)
这是Oracle仅对calc time diff进行查询。我认为如果你用你的表替换双重它应该适用于任何SQL。有LAG / LEAD函数来比较prev / next行值,但我不知道这些值是否在您的SQL版本中可用。我希望这对你有用:
SELECT trunc(mydate / 3600) hr
, trunc(mod(mydate, 3600) / 60) mnt
, trunc(mod(mydate, 3600) / 60 /60) sec
FROM
(
SELECT (to_date('01/02/2013 23:00:00', 'mm/dd/yyyy hh24:mi:ss') -
to_date('01/01/2013 07:00:00', 'mm/dd/yyyy hh24:mi:ss')) * 86400 mydate
FROM dual
)
/