Вопрос проверяет понимание оконных функций и способов выбора одной записи из группы.
Для выбора одной записи из группы используют оконные функции, например ROW_NUMBER(). Данные разбиваются на группы с помощью PARTITION BY, затем выбирается первая строка. Это гибкий способ управлять порядком выбора. Такой подход применяется при дедупликации и аналитике.
Когда в таблице есть несколько записей для одного ключа, нужно выбрать одну — например, самую раннюю.
Пример:
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at) AS rn
FROM registrations
) t
WHERE rn = 1;
Что происходит:
Таблица делится на группы по user_id
В каждой группе строки нумеруются
Выбирается первая строка
GROUP BY возвращает агрегированные значения, но не позволяет получить всю строку без дополнительных приемов.
В PostgreSQL:
SELECT DISTINCT ON (user_id) *
FROM registrations
ORDER BY user_id, created_at;
Этот способ часто проще и быстрее.
Первая регистрация пользователя
Последний статус заказа
Дедупликация событий
Оконные функции и DISTINCT ON — стандартные способы выбора одной записи из группы.