try this one
CREATE TABLE #UserCheckInOut(UserId INT,
CheckTime DATETIME,
CheckType CHAR)
INSERT
INTO #UserCheckInOut
VALUES
(1, CONVERT(DATETIME, '2015-02-20 09:00:00', 120), 'I'),
(1, CONVERT(DATETIME, '2015-02-20 18:00:00', 120), 'O'),
(1, CONVERT(DATETIME, '2015-02-21 09:00:00', 120), 'I'),
(1, CONVERT(DATETIME, '2015-02-21 18:00:00', 120), 'O'),
(1, CONVERT(DATETIME, '2015-02-21 18:00:10', 120), 'O'),
(1, CONVERT(DATETIME, '2015-02-21 18:00:20', 120), 'O'),
(1, CONVERT(DATETIME, '2015-02-22 09:00:00', 120), 'I'),
(1, CONVERT(DATETIME, '2015-02-22 12:00:00', 120), 'O'),
(1, CONVERT(DATETIME, '2015-02-22 14:00:10', 120), 'I'),
(1, CONVERT(DATETIME, '2015-02-22 18:00:20', 120), 'O'),
(1, CONVERT(DATETIME, '2015-02-25 20:00:00', 120), 'I'),
(1, CONVERT(DATETIME, '2015-02-26 06:00:00', 120), 'O');
WITH UserChecks(UserId, CheckTime, CheckType, Id) AS(
SELECT *, ROW_NUMBER() over (ORDER BY CheckTime) AS Id
FROM #UserCheckInOut
WHERE UserId = 1
),
UserCheckPeer AS(
SELECT UserId, CheckTime AS CheckInTime,
(
SELECT TOP(1) CheckTime
FROM UserChecks AS ckOut
WHERE ckOut.CheckType = 'O'
AND ckOut.Id > ckIn.Id
AND ckOut.Id < (SELECT TOP(1) Id FROM UserChecks WHERE CheckType = 'I' AND Id > ckIn.Id)
ORDER BY ckOut.CheckTime DESC
) AS CheckOutTime
FROM UserChecks AS ckIn
WHERE CheckType = 'I'
)
SELECT *
FROM UserCheckPeer