CREATE PROCEDURE [dbo].[BillingGetUsers] @date1 datetime, @date2 datetime AS -- проверяем чтобы даты не были больше текущей if (@date2 > GETDATE()) set @date2 = GETDATE() if (@date2 < @date1) return -- выбираем всех юзеров, у которых были сессии пересекающиеся с заданным диапазоном -- если сессия ещё не закрыта - тоже считаем select [UserID], (select [FIO] from [Users] where [ID] = b.[UserID]) as [UserName] from [Billing] b with (nolock) where [EventTypeID] = 10 and ([PeriodDT1] < @date2 and ([PeriodDT2] is null or [PeriodDT2] > @date1)) group by [UserID] order by [UserName]