SQL查询,用于计算从前一天到第二天结束的小时数

时间:2013-01-28 12:41:33

标签: mysql sql sql-server

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点结束。希望有人可以帮我解决这个问题。感谢。

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

2 个答案:

答案 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
  )
 /