Я считаю, что для этого также можно использовать комбинацию LAG & DATEADD & IIF (или CASE).
Затем вы получаете 1 или 0 для каждой даты клиента по сравнению с предыдущей датой клиента.
Который затем можно суммировать.
Это альтернатива, которая не требует самостоятельного объединения.
declare @Table1 table (ID int identity(1,1) primary key, Customer varchar(5), [Date] datetime);
INSERT INTO @Table1 ([Date],Customer) VALUES
('2018-06-26','Tom'),
('2018-07-02','Carly'),
('2018-07-01','Jeff'),
('2018-07-20','Jeff'),
('2018-07-23','Jeff'),
('2018-08-03','Tom');
SELECT Customer, SUM(PreviousDateWithinMonth) as TotalWithinMonth
FROM
(
SELECT * , IIF(DATEADD(month,1,lag([Date]) OVER (PARTITION BY Customer ORDER BY [Date])) >= [Date],1,0) AS PreviousDateWithinMonth
FROM @Table1 t1
) q
GROUP BY Customer
HAVING SUM(PreviousDateWithinMonth) > 0
ORDER BY TotalWithinMonth DESC;