Войти Регистрация
Data base

29. Тариф на момент входа

Средняя

В tariffs — история тарифов: абонент был на тарифе с valid_from включительно до valid_to не включительно; у действующего тарифа valid_to пустой.

Для каждого месяца 2025 года посчитайте, сколько разных абонентов хотя бы раз зашли в приложение (logins), когда у них был тариф «Доступ». Тариф смотрится на момент конкретного входа, а не на сегодня.

Верните month (первое число месяца) и users, только месяцы с ненулевым значением. Порядок — по month.

В работе: Оценка, пользуются ли приложением абоненты дешёвого тарифа, перед тем как его закрыть для новых подключений.

Таблицы

logins — одна строка — одно открытие приложения «Мой МТС»

КолонкаТипЧто значит
created_attimestampвремя входа
msisdntextномер абонента
vendortextпроизводитель телефона: Apple, Samsung, Xiaomi

tariffs — история тарифов абонента

КолонкаТипЧто значит
msisdntextномер
tariff_nametextтариф
valid_fromtimestampначало, включительно
valid_totimestampконец, не включительно; NULL — действует

Пример: данные

logins · 6 строк

created_atmsisdnvendor
2025-01-10T10:00:0079161234567Apple
2025-01-20T10:00:0079037770011Samsung
2025-02-03T10:00:0079037770011Samsung
2025-03-03T10:00:0079037770011Samsung
2025-03-04T10:00:0079161234567Apple
2025-03-05T10:00:0079852223344Xiaomi

tariffs · 4 строки

msisdntariff_namevalid_fromvalid_to
79161234567Доступ2024-06-01T00:00:00NULL
79037770011Доступ2025-01-01T00:00:002025-02-15T00:00:00
79037770011Безлимит2025-02-15T00:00:00NULL
79852223344Безлимит2024-01-01T00:00:00NULL

Ожидаемый ответ

monthusers
2025-01-012
2025-02-011
2025-03-011
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
month, users
JOINдатыNULLDISTINCTGROUP BY

Источник: тестовое стажёра продуктовой аналитики МТС, сборник No Data No Growth. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.