Я выполнил работу, используя целые числа, а не поля даты и времени, но я считаю, что следующий фрагмент SQL-кода даст вам то, что вы хотите.
По сути, я сравнил дату начала и окончания каждого пользователя по отношению друг к другу, используя самостоятельное соединение. Если пользователь A запускался до или одновременно с пользователем B, а пользователь B начинался до или одновременно с завершением пользователя A, они работают одновременно. Таким образом, я нашел пользователя с максимальным числом одновременных пользователей (и добавил 1 для себя, так как я исключил их в самосоединении.)
Я заметил, что у вас есть несколько строк для каждого пользователя. Пожалуйста, обратите внимание, что sql ниже предполагает, что один и тот же пользователь не может запускать несколько экземпляров одновременно (одновременно). Если это предположение не выполняется, я надеюсь, что у вас есть дополнительный столбец, который уникален для каждой строки. Используйте этот столбец, а не UserId во всей подпрограмме sql.
Я очень близко познакомил тебя. Надеюсь, это поможет. Желаем удачи.
DECLARE @Table TABLE
(
UserId int,
StartedOn int,
EndedOn int
)
Insert Into @Table
Select 1, 1, 3
union
Select 2, 2, 4
union
Select 3, 3, 5
union
Select 4, 4, 6
union
Select 5, 7, 8
union
Select 6, 9, 10
union
Select 7, 9, 11
union
Select 8, 9, 12
union
Select 9, 10, 12
union
Select 10, 10, 13
--Select * from @Table
Select
A.UserId,
Count(B.UserId) + 1 as 'Concurrent Users'
FROM @Table A, @Table B
WHERE A.StartedOn <= B.StartedOn
AND B.StartedOn <= A.EndedOn
AND A.UserId != B.UserId
Group By A.UserId
Order By Count(B.UserId) Desc