Напиши SQL-запрос для автоматического поиска пользователей, которые не заходили в систему более 6 месяцев (таблица users, поле last_activity).

Для поиска пользователей, которые не заходили в систему более 6 месяцев, используется стандартный SQL-запрос с фильтрацией по полю last_activity. Ниже приведены варианты для наиболее популярных СУБД.

**MySQL / MariaDB:**
sql
SELECT id, username, email, last_activity
FROM users
WHERE last_activity < NOW() — INTERVAL 6 MONTH
OR last_activity IS NULL;

**PostgreSQL:**
sql
SELECT id, username, email, last_activity
FROM users
WHERE last_activity < NOW() — INTERVAL '6 months'
OR last_activity IS NULL;

**Microsoft SQL Server (T-SQL):**
sql
SELECT id, username, email, last_activity
FROM users
WHERE last_activity < DATEADD(MONTH, -6, GETDATE())
OR last_activity IS NULL;

**SQLite:**
sql
SELECT id, username, email, last_activity
FROM users
WHERE last_activity < DATE('now', '-6 months')
OR last_activity IS NULL;

**Пояснения к запросу:**
— `last_activity < NOW() — INTERVAL 6 MONTH` — выбирает записи, где дата последней активности раньше, чем текущий момент минус 6 месяцев.
— `OR last_activity IS NULL` — включает пользователей, у которых поле вообще не заполнено (они никогда не входили в систему).
— Рекомендуется добавить `ORDER BY last_activity ASC`, чтобы сначала видеть самых «давних» пользователей.

**Расширенный вариант с подсчётом дней неактивности:**
sql
SELECT id, username, email, last_activity,
DATEDIFF(NOW(), last_activity) AS days_inactive
FROM users
WHERE last_activity < NOW() — INTERVAL 6 MONTH
OR last_activity IS NULL
ORDER BY days_inactive DESC;

**Рекомендации по использованию:**
1. Перед удалением или блокировкой пользователей обязательно делайте резервную копию.
2. Добавьте индекс на поле `last_activity` для ускорения запроса на больших таблицах: `CREATE INDEX idx_last_activity ON users(last_activity);`
3. Для автоматизации можно обернуть запрос в хранимую процедуру или запускать через планировщик задач (cron, pg_cron, SQL Agent).
4. Если нужно экспортировать результат в CSV, используйте: `SELECT … INTO OUTFILE '/path/file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'n'` (MySQL) или `COPY (SELECT …) TO '/path/file.csv' CSV HEADER` (PostgreSQL).

**Строка для CSV (заголовок):**
`id,username,email,last_activity,days_inactive`


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.