SQL запрос для неактивных пользователей

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица, которая отслеживает активность пользователя в игре. Информация об активности хранится в полях категории и подкатегории. Для каждого действия, которое выполняет пользователь, создается запись в таблице this. Теперь я хочу найти пользователей, которые неактивны в течение последних 30 дней.

Столбцы таблицы

  • ID
  • Имя пользователя
  • Имя_группы
  • Activity_Category
  • Activity_Subcategory
  • Activity_Date

Пожалуйста, дайте мне знать, если требуется дополнительная информация.

Комментарии:

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

2. Что вы пробовали до сих пор?

3. Это база данных MYSQL.

4. покажите нам, что вы пробовали

Ответ №1:

Используйте агрегацию:

 select user_name
from t
group by user_name
having max(activity_date) <= current_date - interval '30 day';
  

Обратите внимание, что функции даты / времени сильно зависят от базы данных. Таким образом, этот точный синтаксис может не работать в вашей базе данных, но идея должна сработать.

Если у вас есть отдельная таблица пользователей, вероятно, быстрее использовать not exists :

 select u.*
from users u
where not exists (select 1
                  from activity a
                  where a.username = u.username and
                        a.activity_date <= current_date - interval '30 day'
                 );
  

Комментарии:

1. Спасибо за ваш ответ, но не даст ли это мне всех пользователей, которые активны за последние 30 дней, вместо неактивных пользователей?

Ответ №2:

Отсутствие активности в течение последних 30 дней означает, что последняя активность была более 30 дней назад:

 select user_name, max(activity_date)
from tab
group by username
having max(activity_date) < current_date - interval '30' day;