--需要查询的结果:
--员工ID,上班时间,下班时间,上班地点,上一班员工编号,下一班员工编号
-- 6 18:05 24:00 1 5 7
1.
select ID,BeginTime,EndTime,DoorNo
,PreID=(select top 1 ID from @T where DoorNo=t.DoorNo and EndTime<t.BeginTime order by EndTime desc)
,NextID=(select top 1 ID from @T where DoorNo=t.DoorNo and BeginTime>t.EndTime order by BeginTime)
from @T t
where ID=6
2.
SELECT A.*,C.ID AS 上一班员工编号,B.ID AS 下一班员工编号
FROM @T AS A
CROSS APPLY(SELECT TOP(1) ID FROM @T
WHERE BeginTime>A.EndTime
AND DoorNo=A.DoorNo
ORDER BY BeginTime) AS B
CROSS APPLY(SELECT TOP(1) ID FROM @T
WHERE EndTime<A.BeginTime
AND DoorNo=A.DoorNo
ORDER BY EndTime DESC) AS C
WHERE A.ID=6