Примерно так получаются номера строк ваших данных, разделенные по EmployeeID и упорядоченные по Event_Date. Как только вы это получите, присоединитесь к идентификатору сотрудника и следующему номеру строки.
Если вы сделаете это таким образом, вы справитесь с большинством, если не со всеми вашими осложнениями, в том числе когда дата в часах больше, чем дата в часах.
DROP TABLE IF EXISTS #temp
CREATE TABLE #temp (EmployeeID VARCHAR(256), Event_Date DATE, Event_Type varchar(256))
INSERT INTO #temp
VALUES
( '2450770', '2020/01/02', 'Clocked Out'),
( '2195326', '2020/01/06', 'Clocked In'),
( '2195326', '2020/01/10', 'Clocked Out'),
( '800455', '2020/01/15', 'Clocked In'),
( '2450770', '2020/01/15', 'Clocked In'),
( '800455', '2020/01/22', 'Clocked Out'),
( '2195326', '2020/01/23', 'Clocked In'),
( '2331340', '2020/01/25', 'Clocked In'),
( '2195326', '2020/01/27', 'Clocked Out'),
( '2331340', '2020/02/01', 'Clocked Out'),
( '2515957', '2020/02/05', 'Clocked In')
DROP TABLE IF EXISTS #output
SELECT
EmployeeID,
Event_Date,
Event_Type,
ROW_NUMBER() OVER(PARTITION BY EmployeeID ORDER BY Event_Date) AS RN
INTO #output
FROM #temp
SELECT
I.EmployeeID,
I.Event_Date AS [Clocked In],
O.Event_Date AS [Clocked Out]
FROM #output I
LEFT JOIN #output O ON O.EmployeeID + O.RN = I.EmployeeID + (I.RN + 1) AND O.Event_Type = 'Clocked Out'
WHERE I.Event_Type = 'Clocked In'