2010-05-18 2 views
3

Этот SQL-запрос дает мне сегодня число активных пользователей за последние 30 дней:SQL запрос для активных пользователей

SELECT COUNT(*) 
FROM table.users 
WHERE creation_tsz >= (now() - interval '30 days') 

Как я могу изменить его, чтобы получить не одно значение, а таблицу активных пользователей для диапазон дат?

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

 
Date  Users active in the last 30 days 
1/1/2010 10000 
1/2/2010 11234 
1/3/2010 12343 
1/4/2010 15944 
...  ... 

Спасибо,

Роб

+0

Когда вы говорите «активные» пользователи, пожалуйста, определите, что вы подразумеваете под этим. Вы используете creat_tsz или есть другой столбец для использования для «active»? –

+0

Я использую create_tsz, но я хочу получить это значение не только на сегодняшний день (что я делаю с вышеуказанным запросом), но и для ряда дат, которые я задал. – Roberto

ответ

2

COUNT(*) Заменить с *.

+1

Не могу с этим спорить. –

+0

Вышеуказанный мой размер памяти. – Roberto

+0

@Roberto: Вы можете уменьшить размер вывода двумя способами. Либо ограничивайте количество столбцов, заменив 'count (*)' на 'имя, фамилию, адрес электронной почты ... .... Или уменьшите временное окно, т. Е. 'Interval '5 days'' – Andomar

1

Я не знаю, какую базу данных вы используете, поэтому трудно быть конкретным. Если нет ни одного раза в ваших датах, вы можете сделать это:

SELECT creation_tsz as Date, COUNT(*) as Count 
FROM table.users 
WHERE creation_tsz >= (now() - interval '30 days') 
GROUP BY creation_tsz 

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

SELECT month(creation_tsz) as Month, day(creation_tsz) as Day, COUNT(*) as Count 
FROM table.users 
WHERE creation_tsz >= (now() - interval '30 days') 
GROUP BY month(creation_tsz), day(creation_tsz) 
+0

Как указать дату начала и окончания диапазона дат, для которого я хочу получить результаты? Thanks – Roberto

+0

Попробуйте изменить предложение where на: 'where creation_tsz между '2010-01-01' и '2010-01-30'' – Andomar

1

Если каждая строка данных в вашей таблице представляет отдельного пользователя, вы можете использовать запрос ниже.

SELECT COUNT(1), date 
FROM table 
WHERE date >= (now() - interval '30 days') 
GROUP BY 2 ORDER BY 2 DESC; 

Если ваша таблица включает в себя все сеансы, но имеет отдельный идентификатор для каждого пользователя, вы можете использовать запрос ниже.

SELECT COUNT(DISTINCT distinct_id), date 
FROM table 
WHERE date >= (now() - interval '30 days') 
GROUP BY 2 ORDER BY 2 DESC; 
Смежные вопросы