#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;