2015-09-11 4 views
0

У меня есть пользовательская база данных, и мне нужна помощь в формировании запроса.Как получить количество строк в SQL?

Table = users 
fields = sign_in_count , last_sign_in_at 

Эти два запроса, который дает мне следующие результаты: -

select * 
from users 
where last_sign_in_at >= '2015-08-01' and sign_in_count != '' 

дает мне 131000 строк.

select * 
from users 
where last_sign_in_at between '2015-05-01' and '2015-09-11' and 
     sign_in_count <> '' 

дает мне 203000 строк.

поэтому разница между пользователями в 72 000 пользователей, которые подписали хотя бы один раз между 05/15 по 08/15.

Мне нужно знать, нет пользователей этих пользователей 72k, которые вошли в систему более одного раза.

+2

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

+0

Какая часть вас вызывает трудности? Кроме того, каков тип sign_in_count? –

+2

(Помимо этого, пожалуйста, не стесняйтесь, чтобы ваши вопросы были срочными. Читатели здесь добровольцы, и они вообще не любят быть поспешными). – halfer

ответ

0

Нижеприведенный запрос будет работать, если в таблице users есть столбец user_id.

select count(user_id) from 
    (
    select user_id --replace it with appropriate user identifier column 
    from (select * from users 
    where last_sign_in_at between '2015-05-01' and '2015-09-11' 
    and sign_in_count != '' 
    and user_id not in (select user_id from users 
    where last_sign_in_at >= '2015-08-01' and sign_in_count!='') 
    ) t 
    group by user_id 
    having count(*) > 1 
    ) t1 
0

Что с

Select count(*) from users 
where last_sign_in_at between '2015-05-01' and '2015-08-01' 
and sign_in_count > 1 

Или я что-то пропустил?

0

Вы хотите запросить общее количество пользователей в выбранный период времени, которые вошли в систему более одного раза.

Но вы только запрашиваете, чтобы найти общее количество пользователей между «2015-05-01» и «2015-08-01» и sign_in_count <> ''.

0

Рассмотрим взятия остатка от двух where условий в производной таблице для count():

select count(*) 
from 
    (select * from users 
    where last_sign_in_at > '2015-05-01' 
    and last_sign_in_at < '215-08-01' 
    and sign_in_count != '')