Если я правильно понимаю, вам нужно использовать CROSS APPLY
в подзапросе, чтобы получить наиболее близкую дату к logout
.
вот так.
SELECT t1.Computer_ID,
t1.User_ID,
CONVERT(varchar, DATEADD(s, DATEDIFF(s,t1.Event_time ,t2.Event_time), 0), 108) 'castTime'
FROM T1 t1 CROSS APPLY (
SELECT TOP 1 *
FROM T1 t2
WHERE t2.EventType = 43
AND t1.Computer_ID = t2.Computer_ID
AND t1.User_ID = t2.User_ID
ORDER BY Event_time DESC
) t2
WHERE t1.EventType = 42
and t1.Event_time BETWEEN '2017/10/10' and '2017/10/11'
sqlfiddle: http://sqlfiddle.com/#!18/4703f/2
Редактировать
Этот запрос является расчетным временем каждого компьютера.
Если вы этого не ожидали, не могли бы вы предоставить ожидаемый результат из моих образцов данных sqlfiddle?
SELECT t1.Computer_ID,
CONVERT(char(10), t1.Event_time,126) 'Dates',
Convert(VARCHAR,DATEADD(ms,SUM(DATEDIFF(ms, '00:00:00.000', castTime)),'00:00:00.000'),108) 'totleCastTime'
FROM T1 t1 CROSS APPLY (
SELECT TOP 1 *,
DATEADD(s, DATEDIFF(s,t1.Event_time,t2.Event_time), 0) 'castTime'
FROM T1 t2
WHERE t2.EventType = 43
AND t1.Computer_ID = t2.Computer_ID
ORDER BY Event_time DESC
) t2
WHERE t1.EventType = 42 and t1.Event_time BETWEEN '2017/10/10' and '2017/10/11'
GROUP BY t1.Computer_ID,
CONVERT(char(10),t1.Event_time,126)
sqlfiddle: http://sqlfiddle.com/#!18/4703f/23