Напиши SQL-запрос для автоматического поиска пользователей, которые зарегистрировались через «электронную очередь», но не завершили процесс верификации.
## SQL-запрос для поиска незавершённых верификаций
Предположим, что в базе данных есть таблица `users` с информацией о пользователях и таблица `verifications` с данными о верификации. Структура примерная, но типичная для подобных систем.
### Предполагаемая структура таблиц
**Таблица `users`:**
— `id` — уникальный идентификатор пользователя
— `email` — электронная почта
— `full_name` — полное имя
— `registration_source` — источник регистрации (например, `’electronic_queue’`)
— `created_at` — дата и время регистрации
**Таблица `verifications`:**
— `id` — идентификатор записи
— `user_id` — внешний ключ на `users.id`
— `status` — статус верификации (`’pending’`, `’completed’`, `’failed’`)
— `completed_at` — дата завершения верификации (NULL, если не завершена)
—
### SQL-запрос
sql
SELECT
u.id AS user_id,
u.full_name,
u.email,
u.created_at AS registration_date,
v.status AS verification_status
FROM users u
LEFT JOIN verifications v ON v.user_id = u.id
WHERE
u.registration_source = ‘electronic_queue’
AND (
v.id IS NULL
OR v.status != ‘completed’
OR v.completed_at IS NULL
)
ORDER BY u.created_at DESC;
—
### Пояснение к запросу
1. **LEFT JOIN** — позволяет найти пользователей, у которых вообще нет записи в таблице верификаций (то есть процесс не был даже начат).
2. **`v.id IS NULL`** — пользователь зарегистрировался, но запись верификации не создавалась.
3. **`v.status != ‘completed’`** — верификация существует, но находится в статусе `pending` или `failed`.
4. **`v.completed_at IS NULL`** — дополнительная проверка: дата завершения не проставлена.
5. **`ORDER BY u.created_at DESC`** — сортировка от новых к старым, чтобы видеть актуальные случаи первыми.
—
### Строка для будущего CSV
Если нужно сформировать одну строку заголовков для экспорта результата в CSV-файл, используй следующий формат:
user_id,full_name,email,registration_date,verification_status
Пример строки с данными:
1042,Иванов Иван Иванович,ivanov@example.com,2024-11-15 09:32:00,pending
—
### Советы по адаптации
— Если источник регистрации хранится в другом поле или с другим значением (например, `’eq’`, `’queue’`), замени строку в условии `WHERE`.
— Для PostgreSQL и MySQL синтаксис идентичен. В MS SQL Server используй `TOP` вместо `LIMIT` при необходимости ограничить выборку.
— Добавь `AND u.created_at >= NOW() — INTERVAL ’30 days’` для фильтрации только за последний месяц.
