Задать вопрос
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
  • Вопрос задан
  • 711 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    DB-021 Язык Oracle PL/SQL для разработчиков
    1 неделя
    Далее
  • Stepik
    SQL для начинающих: с нуля до сертификата Oracle
    2 недели
    Далее
  • OTUS
    SQL для разработчиков и аналитиков
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
Principal Recruitment Москва
от 200 000 до 250 000 ₽
Principal Recruitment Москва
от 200 000 до 350 000 ₽
Principal Recruitment Москва
от 200 000 до 350 000 ₽