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

37. Куда в итоге уходит переадресация

Сложная

В forwarding у номера может быть включена безусловная переадресация на другой номер (forward_to). Тот номер тоже может переадресовывать дальше. Конечный номер — тот, у которого переадресации нет.

Для каждого номера из forwarding верните msisdn, final_number — куда в итоге попадёт вызов, и hops — число переходов. Если цепочка зацикливается (A → B → A), верните NULL в обеих колонках.

Порядок — по msisdn.

В работе: Поддержка разбирает жалобу «до меня не дозвониться»: вызов уходит по цепочке переадресаций или крутится в петле.

Таблицы

forwarding — включённые переадресации; у номера не больше одной

КолонкаТипЧто значит
msisdntextномер с переадресацией
forward_totextкуда переадресован

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

forwarding · 3 строки

msisdnforward_to
7916000000179160000002
7916000000279160000003
7916000000479160000003

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

msisdnfinal_numberhops
79160000001791600000032
79160000002791600000031
79160000004791600000031
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
msisdn, final_number, hops
рекурсивный CTELEFT JOINNULLантиджойн

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

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