Задать вопрос
DMityaev
@DMityaev
системный аналитик

PL SQL: почему FIRST VALUE с сортировкой DESC и LAST_VALUE выдают разные значения?

Суть вопроса. Увидел в скипте коллег функцию FIRST_VALUE с обратной сортировкой по DESC.
Мне его нужно переписать под другую СУБД, которая DESC не понимает

SELECT distinct account_id,
FIRST_VALUE(amount)over(PARTITION BY account_id ORDER BY payment_date desc)last_payment
FROM kollecto.payments
where account_id in (759318,759320,759322,759324)
order by account_id;

Сразу возник вопрос: а почему нельзя использовать LAST_VALUE c сортировкой по умолчанию?

Попробовал:

SELECT distinct account_id,
LAST_VALUE(amount)over(PARTITION BY account_id ORDER BY payment_date)last_payment
FROM kollecto.payments
where account_id in (759318,759320,759322,759324)
order by account_id;

Но проблема в том, что вернулся сильно другой набор значений.

В чем тут загвоздка? 5d849f92489bf475382460.jpeg
5d849f9a20e3c098472552.jpeg
  • Вопрос задан
  • 651 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
unfilled
@unfilled
Попробуйте так:
SELECT distinct account_id,
LAST_VALUE(amount)over(PARTITION BY account_id ORDER BY payment_date  RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) last_payment
FROM kollecto.payments
where account_id in (759318,759320,759322,759324)
order by account_id;

по-умолчанию там RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы