Использование SQL для вычисления среднего ежедневного уникального использования

0

У меня есть таблица MySQL "stats", которая представляет собой список записей для каждого входа на сайт. Каждая запись имеет строку "userId", временную метку "loginTime" и другие поля. Для каждого пользователя может быть более одной записи - для каждого входа, который он делает. Я хочу написать запрос, который будет вычислять среднее значение уникальных ежедневных логинов за, скажем, 30 дней. Любые идеи?

  • 1
    Пожалуйста, отправьте код, который вы написали до сих пор. Люди обычно не любят просто писать свой код для вас.
  • 0
    Я "SELECT DISTINCT userID FROM stats WHERE DATE ( loginTime ) = CURDATE ()" , который будет показывать уникальных пользователей на сегодняшний день. Я могу заменить CURDATE () на любую дату, и я могу COUNT () результаты, но я не знаю, как пройти через последние 30 дней с циклом.
Теги:

3 ответа

1

/* Это должно дать вам одну строку для каждой даты и уникальных посещений на эту дату */

SELECT DATE (loginTime) LoginDate, COUNT (userID) UserCount

FROM stats

ГДЕ ДАТА (loginTime) МЕЖДУ [дата начала] И [дата окончания]

GROUP BY DATE (logintime), userID

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

0

Спасибо всем, в конце концов я использовал: SELECT SUM (uniqueUsers)/30 AS DAU FROM (

SELECT DATE (loginTime) AS DATE, COUNT (DISTINCT userID) AS uniqueUsers FROM user_requests WHERE DATE (loginTime) > DATE_SUB (CURDATE(), INTERVAL 30 ДЕНЬ) ГРУППА ПО ДАТЕ (loginTime) ) AS daily_users

Я использую SUM и деля на 30 вместо среднего, потому что в некоторые дни у меня может не быть логинов, и я хочу это учитывать. Но на любом ежедневном веб-сайте с интенсивным трафиком просто использование AVG даст те же результаты

0

Я, вероятно, ошибаюсь, но если вы это сделали: select count(distinct userid) from stats where logintime between start of :day and end of day для day в каждый из этих 30 дней выбрали эти 30 отсчетов (которые можно было предварительно подсчитать в кешированном виде (так как у вас, вероятно, нет пользователей, входивших в систему прошлые времена)), и они просто усредняют их на языке программирования, что выполнение запроса из

Я читаю http://unganisha.org/home/pages/Generating_Sequences_With_SQL/index.html, когда вы смотрите и думаете, если бы у вас была таблица с числами от 0 до 30, давайте назовите ее смещения для этого пример:

select avg(userstoday)
from (select count(userid) as userstoday, day
      from stats join offsets on (stats.logintime=(current_day)-offsets.day)
      group by day)

и, как я заметил, значение userstoday может быть предварительно рассчитано и сохранено в таблице

Ещё вопросы

Сообщество Overcoder
Наверх
Меню