2017-01-25 1 views
1

У меня есть таблица (tbl) пользователей, у которых было несколько сканирований в одни и те же даты, а некоторые пользователи имели несколько сканирований на несколько дат.уникальная запись на нескольких неузнаваемых столбцах

user date  scan 
andy 20160301 T1 
andy 20160301 T2 
andy 20160301 T1 
andy 20160401 T1 
andy 20160401 T2 
lee  20160401 T1 
lee  20160401 T2 
lee  20160701 T1 
lee  20160701 T2 
lee  20160801 T1 
lee  20160801 T2 
tom  20160501 T1 
tom  20160501 T2 
tom  20160501 T2 

Я хотел бы количество уникальных дат для каждого пользователя (независимо от того, сколько сканирования происходило на каждую дату), так что-то вроде этого:

user NumVisits 
andy 2 
lee  3 
tom  1 

Я пытался несколько вещей, но ближайший я пришел к этому простому запросу:

SELECT user, COUNT(*) NumVisits FROM tbl GROUP BY user HAVING NumVisits > 1; 

, который дает:

user NumVisits 
andy 5 
lee  6 
tom  3 

Проблема с этим выходом заключается в том, что она учитывает множественное сканирование на каждую дату. Может ли кто-нибудь помочь мне разобраться, как получить этот результат?

user NumVisits 
andy 2 
lee  3 
tom  1 

ответ

1

Использование Count(distinct column) для этого:

SELECT 
    user, 
    COUNT(distinct date) NumVisits 
FROM tbl GROUP BY user 
+0

это прекрасно работает, и это так просто. Спасибо! – goodbenito

Смежные вопросы