Как исключить дубликаты при подсчете?

#sql #sql-server #azure-sql-database #azure-sql-server

#sql #sql-сервер #azure-sql-database #azure-sql-server

Вопрос:

Допустим, у меня есть данные, подобные приведенным ниже:

 id, dateVisited
1   3/4/2019  --Monday
1   3/4/2019  --Monday
1   3/5/2019  --Tuesday
2   3/4/3019  --Monday
2   3/5/2019  --Tuesday
2   3/7/2019  --Thursday
3   3/7/2019  --Thursday
4   3/5/2019  --Tuesday
5   3/8/2019  --Friday
  

Как бы я получил количество посещений в день, но учитывал только определенное, id не более 1 раза в данный день. Итак, для приведенных выше данных он должен возвращать:

 day, visits
2    2     --show 2 here instead of 3 because ID 1 visited twice on 3/4
3    2
5    2
6    1
  

Я могу получить необработанные итоги, выполнив:

 SELECT COUNT(*) FROM myTable group by DATENAME(dw,dateVisited)
  

но я не совсем понимаю, как исключить дубликаты.

Ответ №1:

Я думаю, вы хотите count(distinct) :

 SELECT DATENAME(dw,dateVisited), COUNT(DISTINCT id)
FROM myTable 
GROUP BY DATENAME(dw, dateVisited)