2016-07-06 8 views
1

Ich habe die folgende SQL-TabelleCount einzigartige Tage nach Benutzer gruppiert

|user|log_date   | 
| 2 |2016-06-23 10:55:52 | 
| 2 |2016-06-23 10:55:54 | 
| 2 |2016-06-24 10:53:54 | 
| 2 |2016-06-24 10:54:54 | 

und so weiter mit vielen anderen Benutzern und log_dates. Was ich will, ist für den ganzen Monat zu überprüfen:

where left(log_date,7)="2016-06" 

Aber ich möchte einen Tag nur einmal pro Tag zählen. So sollte das Ergebnis für meine Tabelle in diesem Beispiel sein:

und ich möchte es von Benutzern gruppiert werden. Also für jeden Benutzer in der Tabelle möchte ich einzigartige Tage zählen.

Kann mir jemand einen Tipp geben?

Antwort

1

Schreiben der Bedingung auf diese Weise die Verwendung eines Index ermöglicht ...

SELECT t.user 
    , COUNT(DISTINCT DATE(t.log_date)) unique_days 
    FROM my_table t 
WHERE t.log_date BETWEEN '2016-06-01 00:00:00' AND '2016-06-31 23:59:59' -- or t.log_date >= '2016-06-01 00:00:00' AND t.log_date < '2016-07-01 00:00:00' 
GROUP 
    BY t.user; 

(nicht sicher, warum Sagi ihre Antwort gelöscht, nachdem die Korrektur es)

0

Versuchen Sie folgendes:

select 
    user, 
    count(distinct day(log_date)) as `count of unique days` 
from yourtable 
where left(log_date, 7) = '2016-06' 
group by user 

SQLFiddle Demo