Доблесть милее вдвойне, если доблестный телом прекрасен (Вергилий).

Функция LAST_VALUE в MySQL

2 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
13 октября 2019
MySQL. Математические функции
Описание: в этой статье вы узнаете, как использовать функцию LAST_VALUE() в MySQL для возврата последней строки в упорядоченном наборе строк.

 

Обзор функций LAST_VALUE() в MySQL

Функция LAST_VALUE() является оконной функцией, что позволяет выбрать последнюю строку в упорядоченном наборе строк.

Ниже показан синтаксис функции LAST_VALUE():

LAST_VALUE (expression) OVER (
[partition_clause]
[order_clause]
[frame_clause]
)

 

Функция LAST_VALUE() возвращает значение expression из последней строки отсортированного набора строк.

Пункт OVER имеет три положения: partition_clause, order_clause и frame_clause.

 

partition_clause

partition_clause имеет следующий синтаксис:

PARTITION BY expr1, expr2, ...

 

Раздел PARTITION BY распределяет наборы результатов на несколько разделов , указанных одного или более выражений expr1, expr2 и т.д. Функция LAST_VALUE() применяется к каждой секции независимо друг от друга.

 

order_clause

order_clause имеет следующий синтаксис:

ORDER BY  expr1 [ASC|DESC],...

 

Предложение ORDER BY определяет логические порядки строк в разделах, где применяется функция LAST_VALUE().

 

 frame_clause

В frame_clause определяет подмножество текущего раздела, к которому применяется функция LAST_VALUE(). Для более подробной информации frame_clause, пожалуйста, ознакомьтесь с руководством по оконным функциям.

 

Примеры функций LAST_VALUE() в MySQL

Давайте настроим образец таблицы для демонстрации.

Ниже приведен сценарий для создания таблицы overtime и внесения данных в таблицу.

CREATE TABLE overtime (
employee_name VARCHAR(50) NOT NULL,
department VARCHAR(50) NOT NULL,
hours INT NOT NULL,
PRIMARY KEY (employee_name , department)
);
INSERT INTO overtime(employee_name, department, hours)
VALUES('Anna An','Accounting',43),
('AndreyEx Le','Accounting',89),
('Maria Mr','Accounting',55),
('Anatolyi Ba','Finance',34),
('Alex Av','Finance',54),
('Max Oh','Finance',33),
('Andrey Da','IT',68),

 

1) Пример LAST_VALUE() по всему результату запроса

Следующий оператор получает имя сотрудника, сверхурочную работу и сотрудника, который имеет наибольшее сверхурочное время:

SELECT
employee_name,
hours,
LAST_VALUE(employee_name) OVER (
ORDER BY hours
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) highest_overtime_employee
FROM
overtime;

 

В этом примере в предложении ORDER BY указан логический порядок строк в наборе результатов по часам от низкого до высокого.

Спецификация фрейма по умолчанию следующая:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

 

Это означает, что кадр начинается в первой строке и заканчивается в текущей строке набора результатов.

Поэтому, чтобы получить сотрудника с самым высоким сверхурочным временем, мы изменили спецификацию фрейма на следующую:

RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

 

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

 

2) Пример LAST_VALUE() над разделом

Следующее утверждение находит сотрудника, который имеет самые высокие сверхурочные в каждом отделе:

SELECT
employee_name,
department,
hours,
LAST_VALUE(employee_name) OVER (
PARTITION BY department
ORDER BY hours
RANGE BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING
) most_overtime_employee
FROM
overtime;

 

 

В этом примере, во-первых, предложение PARTITION BY разделило сотрудников по отделам. Затем предложение ORDER BY сортирует сотрудников в каждом отделе сверхурочно от низкого до высокого.

Спецификация фрейма в этом случае – это весь раздел. В результате функция LAST_VALUE() выбрала последнюю строку в каждом разделе, в которой был сотрудник с наибольшим временем сверхурочной работы.

Из этой статьи вы узнали, как использовать функцию LAST_VALUE() в MySQL для получения последней строки в упорядоченном наборе строк.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Просмотров: 286

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам:

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close