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

36. Переходы на тариф дешевле

Средняя

В tariff_history — каждая установка тарифа абоненту (первое подключение тоже). Цены — в справочнике tariffs (fee_rub — абонентская плата в месяц).

Найдите смены тарифа, совершённые в 2025 году, где новая плата меньше прежней. Прежний тариф — предыдущая запись абонента по времени, даже если она была в 2024 году. Переход за ту же цену понижением не считается.

Верните msisdn, changed_at, old_tariff, new_tariff, fee_diff_rub (прежняя плата минус новая). Порядок — по changed_at, затем msisdn.

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

Таблицы

tariffs — справочник тарифов

КолонкаТипЧто значит
tariff_idintключ
nametextназвание
fee_rubnumericабонентская плата, ₽/мес

tariff_history — установки тарифа

КолонкаТипЧто значит
msisdntextномер
tariff_idintтариф
changed_attimestampвремя установки

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

tariffs · 4 строки

tariff_idnamefee_rub
1Базовый450
2Безлимит900
3Семейный1200
4Для своих650

tariff_history · 5 строк

msisdntariff_idchanged_at
7916123456722025-01-15T10:00:00
7916123456732025-04-01T12:00:00
7916123456712025-09-20T18:30:00
7903777001112025-02-01T09:00:00
7903777001122025-03-01T09:00:00

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

msisdnchanged_atold_tariffnew_tarifffee_diff_rub
791612345672025-09-20T18:30:00СемейныйБазовый750
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
msisdn, changed_at, old_tariff, new_tariff, fee_diff_rub
оконные функцииJOINдатыNULL

Источник: на данных абонентской базы: история смены тарифов. Условие пересказано своими словами.

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