Hi,
Try the following...it should return all suspect records.
create table #Test
(
checkInOutID int identity not null
, employeeID int not null
, isCheckIn bit not null
, checkInOutTime datetime not null
)
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(1,1,'1 Jan 2008 10:23')
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(1,0,'1 Jan 2008 15:34')
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(2,1,'1 Feb 2008 08:14')
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(2,1,'2 Feb 2008 08:15')
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(1,0,'2 Jan 2008 23:45')
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(3,1,'15 Jan 2008 07:00')
insert into #Test(employeeID,isCheckIn,checkInOutTime)
values(3,0,'15 Jan 2008 19:00')
select *
from #Test t1
where t1.isCheckIn =
(
select top 1
t2.isCheckIn
from #Test t2
where t2.employeeID = t1.employeeID
and t2.checkInOutTime >= t1.checkInOutTime
and t2.checkInOutID <> t1.checkInOutID
order by t2.checkInOutTime asc
)
or t1.isCheckIn =
(
select top 1
t2.isCheckIn
from #Test t2
where t2.employeeID = t1.employeeID
and t2.checkInOutTime <= t1.checkInOutTime
and t2.checkInOutID <> t1.checkInOutID
order by t2.checkInOutTime desc
)
order by t1.employeeID
drop table #Test
Hope this helps...