Вы ищете последнюю транзакцию пользователя, используя ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY paid_at DESC) и оставляя row_number = 1. Что верно, если у пользователя две транзакции с одинаковым paid_at?

AОбе строки получат row_number = 1 за счёт повтора номера при равных значениях paid_at в окне функции
BЗапрос завершится ошибкой выполнения: оконная ROW_NUMBER запрещает совпадения значений paid_at между строками
CОдна строка получит row_number = 1, другая 2, и какая из них окажется первой нестабильно без второго ключа в ORDER BY
DОбе строки будут исключены из результата: условие row_number = 1 для одинаковых paid_at отсекает обе строки разом
Правильный ответ. ROW_NUMBER всегда уникален, но при совпадении значений в сортировке результат может быть нестабильным без дополнительного ключа в ORDER BY.

Разбор

ROW_NUMBER() назначает уникальный номер каждой строке в соответствии с порядком из ORDER BY внутри OVER. Если сортировочный ключ не уникален (совпадение по paid_at), то относительный порядок строк с одинаковым временем не определён, и какая транзакция получит row_number = 1 — может меняться. Чтобы сделать выбор детерминированным, добавляют дополнительный ключ, например ORDER BY paid_at DESC, transaction_id DESC.

Проверь себя · 1/3разбор после ответа
Вы делаете рейтинг товаров по выручке внутри категории. Если два товара делят 2 место, следующий товар должен получить 3 место (без пропуска). Какая функция подходит лучше всего?
Тренировать SQL в Telegram

Ещё вопросы по теме «Оконные функции»