Как написать запрос, чтобы подсчитать количество дней, которые пользователь вошел в систему? - PullRequest
0 голосов
/ 04 августа 2011

Журнал сайта записывает отметку даты и времени каждый раз, когда пользователь входит в систему. Мне нужен запрос для подсчета количества дней, в которые пользователь вошел в систему. Просто подсчет в поле [DateTime] не работать, потому что пользователь может войти в систему более одного раза в день. Итак, я озадачен тем, как просто подсчитать разные дни, когда они вошли в систему. По сути, нам нужен запрос для выдачи:

UserID
NumberOfDaysLoggedIn

Например, пользователь Джон (ID 33) входит в систему следующим образом:

3/26/2008 12:20 PM
3/26/2008 5:58 PM
3/27/2008 11:46 AM

Результаты, которые мы хотим получить:

UserID    NumberofDaysLoggedIn
    33                       2

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

Ответы [ 4 ]

3 голосов
/ 04 августа 2011

Что вам нужно сделать, это округлить даты, а затем поставить их под различные значения.

функция, которая округляет даты: trunc().

, вы можете сделать это следующим образом:

select count(*)
from (select name, trunc(date)
      from table
      group by name, trunc(date))
where name = 'John';

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

select name, count(*)
from (select distinct name, trunc(date)
      from table)
group by name;
2 голосов
/ 04 августа 2011

вам нужно сделать что-то вроде;

select userID, count(distinct trunc(date))
from table
0 голосов
/ 04 августа 2011
with t as 
(
select 1 as id, sysdate as d from dual
union all
select 1 as id, sysdate - 0.5 as d from dual
union all
select 1 as id, sysdate - 0.6 as d from dual
union all
select 1 as id, sysdate - 1 as d from dual
union all
select 2 as id, sysdate - 1 as d from dual
)
select id, count(distinct trunc(d))
from t 
group by id
;
0 голосов
/ 04 августа 2011

Вы можете считать разные даты, что-то вроде:

select count(distinct trunc(t.date))
  from table t
 where t.userId = some user id

trunc() усекает дату до значения дня, но может также принимать параметр формата для усечения до определенной единицы измерения.

...