@bad_shape_guy

Как в SQL посчитать количество пользователей записей, дата которых хотя бы раз была в каждую неделю?

Добрый день, подскажите пожалуйста, имеется таблица из двух колонок LOGIN, LOGON_DATETIME
типа:

user10 ; 2019-10-10 00:00:00
user1 ; 2020-10-15 00:00:00
user3 ; 2020-10-16 00:00:00
user1 ; 2021-10-17 00:00:00


нужно посчитать количество уникальных логинов которые каждую неделю хотя бы раз были в таблице (судя по полю даты) в 2020 году

Т.е. нужно узнать сколько пользователей в 2020 году обязательно каждую неделю хотя раз логинились
  • Вопрос задан
  • 183 просмотра
Пригласить эксперта
Ответы на вопрос 3
thewind
@thewind
php программист, front / backend developer
SELECT count(distinct login), week(logon_datetime) as _week FROM users GROUP BY _week


если надо за конкретный год, то
SELECT count(distinct login), week(logon_datetime) as _week FROM users WHERE year(logon_datetime) = 2020 GROUP BY _week
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Можешь взять за основу этот шаблон. И дописать его.

with temp as (
select 
  user,
  log_time,
  LAG(log_time) OVER (PARTITION BY user ORDER BY log_time) as prev_log_time
from logins)
select user, date_diff(log_time , prev_log_time) as days_diff from temp


В задании неясно что делать с пользователями
которые за всю историю заходили только один раз. Это маржинальный кейс.

И напиши какие ожидается получить отчеты в ответ на твою табличку.
Ответ написан
Комментировать
@BorisKorobkov Куратор тега MySQL
Web developer
Сначала выбрать юзеров и неделю. Потом из предыдущей таблицы выбрать юзеров, у которых количество недель равно количеству недель в исходной таблице

SELECT user_id
FROM (
    SELECT user_id,
           YEARWEEK(datetime, 1) AS year_week,
           COUNT(DISTINCT YEARWEEK(datetime, 1)) AS weeks_count
    FROM your_table
    GROUP BY user_id, YEARWEEK(datetime, 1)
) AS user_weeks
GROUP BY user_id
HAVING COUNT(DISTINCT year_week) = (
    SELECT COUNT(DISTINCT YEARWEEK(datetime, 1)) 
    FROM your_table
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы