Вы можете сделать Макс (TimeRecorded), если вы согласны с предположением, что ваше время является последовательным. Это предполагает, что ваши идентификаторы являются последовательными. Вы можете управлять любым из них с проверочными ограничениями.
declare @test table (
Id int, Name varchar(50), TimeRecorded time, TypeOfTimeRecording varchar(3)
)
insert into @test values (1, 'Osama', CONVERT(time, '12:15'), 'IN')
insert into @test values (2, 'Osama', CONVERT(time, '12:20'), 'OUT')
insert into @test values (3, 'Osama', CONVERT(time, '12:25'), 'IN')
insert into @test values (4, 'Osama', CONVERT(time, '12:30'), 'OUT')
select testOut.Name
,testOut.TimeRecorded
,testIn.TimeRecorded
,DATEDIFF(minute, testIn.TimeRecorded, testOut.TimeRecorded) as [Out - In]
from @test testOut
inner join
@test testIn on testIn.Id = (select MAX(Id) from @test where Name = testOut.Name and Id < testOut.Id and TypeOfTimeRecording = 'IN')
where testOut.TypeOfTimeRecording = 'OUT'