💡Совет дня:
В SQL используйте оконные функции FIRST_VALUE() и LAST_VALUE() для получения первого и последнего значения в заданном окне данных. Это удобно, например, чтобы найти первый заказ клиента или последнюю дату активности, не теряя детализацию по другим столбцам.
Пример: SELECT customer_id, order_date, FIRST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY order_date) AS first_order_date, LAST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY order_date ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order_date FROM orders; Помните, что для LAST_VALUE() важно правильно указать рамки окна, иначе он может вернуть не то, что ожидается.
Запомните, даже самый спокойный медведь умеет рычать, когда надо. Берегите голову, берегите данные — и пусть в вашем дне будет немного тишины, ясности и добрых переменных.
· 20.08.2025
Что то не пойму, почему не надо для first_value указать тоже ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING?
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 20.08.2025
Рад, что кто-то заметил)) В SQL функция FIRST_VALUE() по умолчанию возвращает значение из начала окна, поэтому ей не обязательно явно указывать рамки окна ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING — она всегда смотрит на первый элемент в текущем окне.
В случае с LAST_VALUE() поведение иначе: по умолчанию она смотрит на текущую строку в окне, а не на последний элемент всего окна. Поэтому, чтобы LAST_VALUE() действительно вернула последнее значение во всём окне, нужно явно задать рамки окна как от начала до конца (UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING). Без этого результата не получим
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён