根据你所提供的,这是我猜你需要的。
CREATE TABLE T (id int identity, client varchar(10), enrollment_date date, service_date date)
--client enrollment date service date
INSERT INTO T VALUES
('sam','1-04-2017','1-04-2017'),
('sam','1-04-2017','1-04-2017'),
('jon','1-04-2017','1-04-2017'),
('jon','1-04-2017','1-05-2017'),
('sam','1-04-2017','1-05-2017'),
('jon','1-04-2017','1-07-2017')
DECLARE @StartDate date = '1-04-2017', @EndDate date = '1-07-2017'
SELECT COUNT(DISTINCT client) AS total_clients, COUNT(1)-COUNT(DISTINCT client) AS total_services
FROM T
WHERE service_date BETWEEN @StartDate AND @EndDate
SELECT DISTINCT T.*
FROM T T JOIN (SELECT client, MIN(id) AS enroll_id FROM T GROUP BY client) E
ON T.client = E.client
AND T.id <> E.enroll_id
WHERE service_date BETWEEN @StartDate AND @EndDate
ORDER BY 2, 3
DROP TABLE T
这些是我从中得到的新结果。
total_clients total_services
------------- --------------
2 4
id client enrollment_date service_date
----------- ---------- --------------- ------------
4 jon 2017-01-04 2017-01-05
6 jon 2017-01-04 2017-01-07
2 sam 2017-01-04 2017-01-04
5 sam 2017-01-04 2017-01-05
这只是从整体计数中减去客户端的不同计数以抵消登记事件。
希望这可以帮助你。
这两个客户端很明显。这三项服务是什么?在这种情况下,“抵消”是什么意思? –