Пронумеруйте версии клиента по убыванию start_date и выберите первую через ROW_NUMBER. При одинаковых датах нужен дополнительный порядок.
Как вывести последнее ФИО для каждого клиента, если известен только start_date (end_date неизвестен)?
Пронумеруйте версии клиента по убыванию start_date и выберите первую через ROW_NUMBER. При одинаковых датах нужен дополнительный порядок.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Пронумеруйте версии клиента по убыванию start_date и выберите первую через ROW_NUMBER. При одинаковых датах нужен дополнительный порядок.
Предположим, таблица client_history содержит client_id, full_name, start_date и уникальный version_id:
WITH ranked AS (
SELECT client_id, full_name,
ROW_NUMBER() OVER (
PARTITION BY client_id
ORDER BY start_date DESC, version_id DESC
) AS rn
FROM client_history
)
SELECT client_id, full_name
FROM ranked
WHERE rn = 1;
Это последняя известная версия. Если нужна версия, действующая на конкретную дату, сначала исключите будущие start_date. При равных датах и отсутствии дополнительного правила однозначного последнего ФИО нет.