Описание: в этой статье вы узнаете, как использовать функцию LEAD() в MySQL для доступа к данным следующей строки из текущей строки в том же наборе результатов.
Функция LEAD() является оконной функцией, что позволяет смотреть вперед количество строк и доступ к данным этой строки из текущей строки.
Функция LEAD() очень полезна для вычисления разницы между текущей строкой и следующей строкой в том же наборе результатов.
Ниже показан синтаксис LEAD():
LEAD(<expression>[,offset[, default_value]]) OVER ( PARTITION BY (expr) ORDER BY (expr) )
Функция LEAD() возвращает значение expression из строки offset упорядоченного раздела.
offset это число строк вперед от текущей строки, из которой можно получить значение.
offset должен быть неотрицательным целым числом. Если offset равен нулю, то функция LEAD() оценивает expression как текущую строку.
В случае, если вы пропустите offset, то функция LEAD() использует один по умолчанию.
Если нет следующей строки, функция LEAD() возвращает default_value. Например, если offset равен единице, возвращаемое значение последней строки является default_value.
Если вы не укажете default_value, функция вернется NULL.
Предложение PARTITION BY разделяет строки в наборе результатов на разделы, к которым применяется функция LEAD().
Если предложение PARTITION BY не указано, все строки в наборе результатов обрабатываются как один раздел.
Предложение ORDER BY определяет порядок строк в разделах до применения функции LEAD().
Мы будем использовать таблицы 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 для доступа к данным следующей строки из текущей строки.