2016-11-22 2 views
3

У меня есть таблица, которая показывает для каждой даты список идентификаторов клиентов - показывает клиентов, которые были активны в любой конкретный день. Таким образом, каждая дата может включать идентификаторы, которые также присутствуют в другой дате.Совокупные подсчеты по дате Выпуск

bdate   customer_id 
2012-01-12  111 
2012-01-13  222 
2012-01-13  333 
2012-01-14  111 
2012-01-14  333 
2012-01-14  666 
2012-01-14  777 

Я ищу написать запрос, который вычисляет общее количество уникальных идентификаторов между двумя датами - дата начала дата строки и дата окончания является конкретной датой в будущем.

Мой запрос выглядит следующим образом:

select 
    bdate, 
    count(distinct customer_id) as cts 
from users 
where bdate between bdate and current_date 
group by 1 
order by 1 

Но это производит подсчет уникальных пользователей для каждой даты, как это:

bdate   customer_id 
2012-01-12  1 
2012-01-13  2 
2012-01-14  4 

мой желаемый результат (для подсчета пользователей между начальной строка дата и 2012-01-14)

bdate   customer_id 
2012-01-12  5 - includes (111,222,333,666,777) 
2012-01-13  5 - includes (222,333,111,666,777) 
2012-01-14  4 - includes (111,333,666,777) 
+0

Смотрите, если вы можете сделать присоединиться работа для вас – Strawberry

+0

вы можете уточнить? – user2022284

ответ

0

@Strawberry сказал, что вы можете сделать присоединиться как это:

select 
    t1.bdate, 
    count(distinct t2.customer_id) as cts 
from users t1 
join users t2 on t2.bdate >= t1.bdate 
where t1.bdate between t1.bdate and current_date 
group by t1.bdate 
order by t1.bdate 

присоединиться t2 вы можете получить все пользователи между конкретный день и current_date, то count t2-х customer_id, это все.

SqlFiddle Demo Here

+0

Привет - запрос работает, но время для меня. Таблица пользователей довольно огромная. Есть ли еще один способ запустить это более эффективно? – user2022284

+0

@ user2022284, постарайтесь сделать конкретный день явной датой, и я думаю, что если есть огромные данные, независимо от того, какое это решение, если вы хотите более эффективно, вы должны сделать некоторую оптимизацию для своей таблицы, потому что здесь есть 'join', если есть другое, это может быть или должно быть подзапросом, тогда вы также столкнетесь с проблемой производительности, потому что у вас есть огромные данные. ^^ – Blank

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