我被困住了。我一直在寻找答案,但似乎无法找到从同一张表的两个不同行中减去同一张表中适合的时间。我在执行以下查询时遇到困难。在下表中,我想区分一行的 TimeOut 和下一行的 TimeIn。请考虑在下表中查找第 1 行中的 TimeOut(上午 10:35)和第 2 行中的 TimeIn(上午 10:38)之间的分钟差异。
表格1:TIMESHEET
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
基本上,我需要区分查询中的时间以显示员工休息的时间。
我尝试过加入,但这似乎不起作用,我不知道是否可行OVER
with PARTITION
这是要走的路,因为我似乎无法遵循逻辑(是的,我仍在学习)。我还考虑了两个临时表并比较它们,但是当我开始更改日期或员工 ID 时,这不起作用。最后,我想也许LEAD
in an OVER
陈述?或者只是简单地做一个DATEDIFF
with a CAST
?
尝试这样的事情:
select *, DATEDIFF(minute, (
select max(b.TimeOut)
from TIMESHEET as b where a.EmpID=b.EmpID and b.ROW<a.ROW
), a.TimeIn
) as diff
from TIMESHEET as a
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)