Пользователи, которые были активны как 1 декабря, так и 1 апреля:
with cte
as
(
select UserName, FromDate, ToDate
from MyTable
where Status = 'Active' -- adjust to your status type
)
select distinct UserName
from cte
where
FromDate < '20101202'
and ToDate >= '20101201' and
UserName in
(
select *
from cte
where FromDate < '20110402' and ToDate >= '20110401'
)
Чтобы увидеть, каких пользователей добавили и каких пользователей удалили, вы можете сделать что-то вроде этого:
with cte
as
(
select UserName, FromDate, ToDate
from MyTable
where Status = 'Active' -- adjust to your status type
)
select UserName, sum(WasActiveOnDecFirst) WasActiveOnDecFirst, sum(WasActiveOnAprFirst) WasActiveOnAprFirst
from
(
select
isnull(du.UserName, au.UserName) UserName,
case when du.UserName is null then 0 else 1 end WasActiveOnDecFirst,
case when au.UserName is null then 0 else 1 end WasActiveOnAprFirst
from
(
select distinct UserName
from cte
where FromDate < '20101202' and ToDate >= '20101201'
) du
full join
(
select distinct UserName
from cte
where FromDate < '20110402' and ToDate >= '20110401'
) au
on du.UserName = au.UserName
) tt
group by UserName
with rollup
Результат будет выглядеть следующим образом:
UserName WasActiveOnDecFirst WasActiveOnAprFirst
-------------------- ------------------- -------------------
user1 1 1
user2 1 1
user3 1 1
user4 0 1
NULL 3 4
Последняя строка - это общее количество пользователей.