Функция LEAD в MySQL

Описание: в этой статье вы узнаете, как использовать функцию LEAD() в MySQL для доступа к данным следующей строки из текущей строки в том же наборе результатов.
Обзор функции LEAD() в MySQL
Функция LEAD() является оконной функцией, что позволяет смотреть вперед количество строк и доступ к данным этой строки из текущей строки.
Функция LEAD() очень полезна для вычисления разницы между текущей строкой и следующей строкой в том же наборе результатов.
Ниже показан синтаксис LEAD():
LEAD(<expression>[,offset[, default_value]]) OVER ( PARTITION BY (expr) ORDER BY (expr) )
Expression
Функция LEAD() возвращает значение expression из строки offset упорядоченного раздела.
Offset
offset это число строк вперед от текущей строки, из которой можно получить значение.
offset должен быть неотрицательным целым числом. Если offset равен нулю, то функция LEAD() оценивает expression как текущую строку.
В случае, если вы пропустите offset, то функция LEAD() использует один по умолчанию.
Default_value
Если нет следующей строки, функция LEAD() возвращает default_value. Например, если offset равен единице, возвращаемое значение последней строки является default_value.
Если вы не укажете default_value, функция вернется NULL.
Раздел PARTITION BY
Предложение PARTITION BY разделяет строки в наборе результатов на разделы, к которым применяется функция LEAD().
Если предложение PARTITION BY не указано, все строки в наборе результатов обрабатываются как один раздел.
Предложение ORDER BY
Предложение ORDER BY определяет порядок строк в разделах до применения функции LEAD().
Пример функции LEAD() в MySQL
Мы будем использовать таблицы orders и customers из базы данных для демонстрации:
Следующее утверждение находит дату заказа и следующую дату заказа каждого клиента:
SELECT customerName, orderDate, LEAD(orderDate,1) OVER ( PARTITION BY customerNumber ORDER BY orderDate ) nextOrderDate FROM orders INNER JOIN customers USING (customerNumber);
В этом примере мы сначала разбили набор результатов по номеру клиента на разделы. Затем мы отсортировали каждый раздел по дате заказа. Наконец, функция LEAD() применяется к каждому разделу, чтобы получить следующую дату заказа.
Как только последующая строка пересекает границу раздела, значение nextOrderDate последней строки каждого раздела равно NULL.
В этой статье вы узнали, как использовать функцию LEAD() вMySQL для доступа к данным следующей строки из текущей строки.