2015-10-01 3 views
0

В таблице с двумя столбцами (id и dt) Я хочу подсчитать количество уникальных идентификаторов пользователя, которые вошли в систему (dt - дата входа) за последние 3 дня за любую заданную дату , Это пример моих данных:MySQL - учетные записи по датам катания

id dt 
user_10 2015-09-01 
user_9 2015-09-01 
user_4 2015-09-01 
user_8 2015-09-01 
user_8 2015-09-02 
user_9 2015-09-02 
user_1 2015-09-02 
user_6 2015-09-02 
user_7 2015-09-03 
user_3 2015-09-03 
user_8 2015-09-03 
user_10 2015-09-03 
user_10 2015-09-04 
user_9 2015-09-04 
user_8 2015-09-04 
user_4 2015-09-04 
user_8 2015-09-04 
user_6 2015-09-04 

Ожидаемый выход заключается в следующем:

day count 
2015-09-01 3 
2015-09-02 5 
2015-09-03 7 
2015-09-04 8 

Вот ссылка на sqlfidle с этими данными: http://sqlfiddle.com/#!9/ecda9
Я попробовал несколько подходов, бушель я только возможность получить правильный результат для первого дня в данных:

select t1.dt, count(distinct(t1.id)) from t as t1 INNER JOIN t t2 
ON datediff(t1.dt,t2.dt)<=2 
GROUP BY t1.dt 
order by t1.dt 

ответ

1
SELECT a.dt 
    , COUNT(DISTINCT b.id) n 
    FROM t a 
    JOIN t b 
    ON b.dt BETWEEN a.dt - INTERVAL 3 DAY AND a.dt 
GROUP 
    BY a.dt; 

или приспосабливая ваше решение ...

select t1.dt 
    , count(distinct(t2.id)) 
    from t as t1 
    JOIN t t2 
    ON datediff(t1.dt,t2.dt) BETWEEN 0 AND 2 
GROUP 
    BY t1.dt 
order 
    by t1.dt; 
+0

отлично работает, спасибо. – BogdanC

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