Something like this maybe?
CREATE TABLE #Sales
(
ClientID int,
SaleDate date
);
INSERT INTO #Sales (ClientID, SaleDate)VALUES (1, '20120131');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (2, '20120131');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (3, '20120131');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (4, '20120131');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (1, '20120229');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (2, '20120229');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (4, '20120229');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (5, '20120229');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (1, '20120331');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (2, '20120331');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (5, '20120331');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (6, '20120331');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (1, '20120430');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (6, '20120430');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (7, '20120430');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (1, '20120531');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (5, '20120531');
INSERT INTO #Sales (ClientID, SaleDate)VALUES (7, '20120531');
--SELECT * FROM #Sales;
declare @StartDate date = '20120101',
@EndDate date = '20120630';
WITH SalesActivity as (
SELECT
CASE WHEN s2.ClientID IS NULL
THEN 'NewClient'
ELSE 'LostClient'
END AS ClientAction,
RIGHT(CONVERT(VARCHAR, ISNULL(s1.SaleDate, DATEADD(M,1,s2.SaleDate)), 106), 8) AS SaleDate,
ISNULL(s1.ClientID, s2.ClientID) AS ClientID,
ISNULL(s1.SaleDate, DATEADD(M,1,s2.SaleDate)) SalesDate
FROM
#Sales s1
FULL JOIN #Sales s2
ON s1.ClientID = s2.ClientID
AND MONTH(s1.SaleDate) = MONTH(s2.SaleDate) + 1
WHERE
s1.ClientID IS NULL
OR s2.ClientID IS NULL
)
SELECT
ClientAction,
SaleDate,
ClientID
FROM
SalesActivity
WHERE
SalesDate between dateadd(mm,1,@StartDate) and dateadd(mm,datediff(mm,0,@EndDate),-1)
ORDER BY
SalesDate,
ClientID;
GO
DROP TABLE #Sales
go