Напиши 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’` для фильтрации только за последний месяц.


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

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