1

表名:时间日志

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

表名:时间表

ScheduleID | EmployeeID | TimeIN   | TimeOUT
----------------------------------------------
1          | 1          | 11:00 PM |  07:00 AM

我的问题是,考虑到员工从晚上 11 点开始工作,然后在早上 7 点结束,我如何进行查询来计算员工花费的时间。希望有人可以帮助我解决这个问题。谢谢。

基本上,我需要每个工作日的工作时间。

4

2 回答 2

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 
于 2013-01-28T13:12:48.413 回答
1

这是仅计算时间差异的 Oracle 查询。我认为如果你用你的表替换 dual,它应该适用于任何 SQL。有 LAG/LEAD 函数可以比较上一行/下一行的值,但我不知道这些函数在您的 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
  )
 /
于 2013-01-28T14:34:10.433 回答