Как посчитать уникальные значения за период 30 день на каждую дату

Рейтинг: 0Ответов: 1Опубликовано: 23.04.2015

Есть таблица по входам в онлайн сервис. Как посчитать уникальных клиентов за диапазон 30 дней на каждый день исторически?

Мой пример запроса не отрабатывает, пишет "предел вызовов на использование CPU"

select a.beg, 
       count(client_id) as cnt,
       count(distinct client_id) as dist_cnt 
from   (select dtime_day beg, dtime_day-30 as end from date) a 
left   join table_with_auth b 
on     trunc(b.dtime_authorization) between a.end and a.beg 
where  a.beg>='01.01.2014'  
group  by a.beg
order  by 1 desc  

Как пример хочу получить данные вида

дата_начала_периода | дата_окончания_периода | уникальные_клиенты
-----------------------------------------------------------------
01.04.2015          |02.03.2015              |3000
02.04.2015          |03.03.2015              |6000
03.04.2015          |04.03.2015              |7000
04.04.2015          |05.03.2015              |8000
05.04.2015          |06.03.2015              |7000

Ответы

▲ 1

А так, нет?

SELECT сount(DISTINCT client_id) AS cnt,
       trunc(b.dtime_authorization) AS day
FROM   table_with_auth
WHERE  trunc(b.dtime_authorization) BETWEEN '20140101' AND '20140101' + 30
GROUP  BY cast(dtime_authorization AS DATE);