在sql中找到同一个表中两个连续行之间的时间差

我被卡住了.我已经找到了答案,但似乎无法从相同表中的两个不同行中找到相同表中的时间减去.我在以下查询中遇到困难.在下表中,我想将TimeOut从一行区分到下一行的TimeIn.在下表中考虑查找第1行(上午10:35)中的TimeOut与第2行(上午10:38)中的TimeIn之间的分

我被卡住了.我已经找到了答案,但似乎无法从相同表中的两个不同行中找到相同表中的时间减去.我在以下查询中遇到困难.在下表中,我想将TimeOut从一行区分到下一行的TimeIn.在下表中考虑查找第1行(上午10:35)中的TimeOut与第2行(上午10:38)中的TimeIn之间的分钟差异.

表1:时间表

ROW    EmpID       TimeIn                   TimeOut
----------------------------------------------------------------
1       138         2014-01-05 10:04:00      2014-01-05 10:35:00   
2       138         2014-01-05 10:38:00      2014-01-05 10:59:00 
3       138         2014-01-05 11:05:00      2014-01-05 11:30:00

预期成绩

ROW    EmpID       TimeIn                   TimeOut                  Minutes
----------------------------------------------------------------------------
1       138         2014-01-05 10:04:00      2014-01-05 10:35:00       
2       138         2014-01-05 10:38:00      2014-01-05 10:59:00       3
3       138         2014-01-05 11:05:00      2014-01-05 11:30:00       6
etc
etc
etc

基本上,我需要区分查询中的时间,以显示员工休息的时间.

我已经尝试过加入,但这似乎不起作用,我不知道是否有超越PARTITION是要走的路,因为我似乎无法遵循逻辑(是的,我还在学习).我还考虑了两个临时表并进行比较,但是当我开始更改日期或员工ID时,这不起作用.最后,我想在OVER声明中可能是LEAD?或者用CAST做DATEDIFF是否很简单?

解决方法

我已经针对类似问题解决了这个问题,并且不需要对行进行排序:

select t1.EmpID,t1.TimeIn,t1.TimeOut,datediff(minute,max(t2.TimeOut),t1.TimeIn) as minutes
from timesheet t1 left join timesheet t2 on t1.EmpID = t2.EmpID 
       and t2.TimeOut < t1.TimeIn
group by t1.EmpID,t1.TimeOut

让我知道这个是否奏效.

这是一个sql小提琴:http://sqlfiddle.com/#!3/89a43/1

关于作者: dawei

【声明】:石家庄站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐