Я пытаюсь получить счет, с помощью которого наша клиентская база росла каждый месяц.T-SQL количество уникальных записей по месяцам
Например. «Джош», «Тим» и «Дастин» воспользовались услугой в январе, поэтому в январе количество новых уникальных клиентов будет равно 3.
В феврале «Джош», «Тим» и «Ева» используйте услугу. Как «Джош» и «Tim» использовал услугу ранее, количество новых уникальных клиентов будет 1.
И так далее ....
Я хотел использовать КРОМЕ заявление, но очевидно, что это не получая правильных результатов.
SELECT COUNT(DISTINCT Name) as NewUniqueCustomers, convert(varchar(7), RegDate, 126)
FROM T
GROUP BY convert(varchar(7), RegDate, 126)
EXCEPT
--This should excludie all customers which was included previously
SELECT COUNT(DISTINCT Name)as NewUniqueCustomers, convert(varchar(7), RegDate, 126)
FROM T
WHERE convert(varchar(7), DATEADD(month,-1,RegDate) , 126)
GROUP BY convert(varchar(7), RegDate, 126)
http://sqlfiddle.com/#!3/73621
Просто примечание. Вместо преобразования дат в строки используйте 'cast (RegDate as Date)'. Преобразование не позволяет серверу использовать индексы и приводит к очень плохой производительности. –
Я бы хотел, чтобы они были сгруппированы по ГОДУ-МЕСЯЦЕ. Я просто пытаюсь найти способ исключить имена, которые были включены в предыдущий месяц – Petrik
какой-то код, выполняющий вставку пользователей? если это так, почему бы не вставить проверить, существует ли пользователь и добавить флаг, который он уже существует или нет, подсчет намного проще, вы можете добавить условие, чтобы считать только тех пользователей, с которыми вы были отмечены как новые – Sherlock