Как вывести последнее ФИО для каждого клиента, если известен только start_date (end_date неизвестен)?

Пронумеруйте версии клиента по убыванию start_date и выберите первую через ROW_NUMBER. При одинаковых датах нужен дополнительный порядок.

Короткий ответ

Что ответить на собеседовании

Пронумеруйте версии клиента по убыванию 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. При равных датах и отсутствии дополнительного правила однозначного последнего ФИО нет.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее