Я хочу посчитать уникальные идентификаторы за конкретный месяц, который не зарегистрирован за последние 4 месяца. В настоящее время я использую этот запрос, который не учитывает определенные подслучаи и крайне неэффективен для большой базы данных -
select month(dd/mm/yyyy), (count(distinct ID) - sum(l))
from
(select x.ID, x.dd/mm/yyyy, y.ID as ID2, y.dd/mm/yyyy as Date2, (case when x.ID = y.ID then 1 else 0 end as l) from table1 x
left join table1 y
on y.dd/mm/yyyy between dateadd(month,-4, x.dd/mm/yyyy) and dateadd(month,-1, x.dd/mm/yyyy))
group by month(dd/mm/yyyy)
order by month(dd/mm/yyyy);
(dd/mm/yyyy) ID
01/01/2018 A
01/02/2018 B
02/02/2018 C
01/03/2018 A
02/03/2018 D
01/04/2018 D
02/04/2018 E
01/05/2018 E
02/05/2018 A
01/05/2018 F
01/05/2018 G
Ожидаемый результат -
Month Count
1 1 --(A)
2 2 --(B,C)
3 1 --(D)
4 1 --(E)
5 2 --(F,G)