LAG ФУНКЦИЯ

Узнайте, как использовать Oracle / PLSQL функцию LAG с синтаксисом и примерами.

Описание

Функция Oracle / PLSQL LAG аналитическая функция, которая позволяет запрашивать более одной строки в таблице, в то время, не имея присоединенной к себе таблицы. Это возвращает значения из предыдущей строки в таблице. Для возврата значения из следующего ряда, попробуйте использовать функцию LEAD.

Синтаксис

Синтаксис функции Oracle / PLSQL LAG:

LAG ( expression [, offset [, default] ] )
over ( [ query_partition_clause ] order_by_clause )

Параметры или аргументы

expression выражение, которое может содержать другие встроенные функции, но не может содержать аналитические функции.
offset является обязательным. Это физическое смещение от текущей строки в таблице. Если этот параметр не указан, то по умолчанию 1.
default является необязательным. Это значение, которое возвращается, если offset выходит за границы таблицы. Если этот параметр не указан, то по умолчанию Null.

Применение

Функцию LAG можно использовать в следующих версиях Oracle / PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Пример

Функция LAG может быть использована в Oracle / PLSQL.

Посмотрим на примере. Если у нас был стол заказов, который содержал следующие данные:

ORDER_DATE PRODUCT_ID QTY
25/09/2007 1000 20
26/09/2007 2000 15
27/09/2007 1000 8
28/09/2007 2000 12
29/09/2007 2000 2
30/09/2007 1000 4

И выполним следующий запрос:

Получим следующий результат:

ORDER_DATE PRODUCT_ID QTY
1000 25/09/2007
2000 26/09/2007 25/09/2007
1000 27/09/2007 26/09/2007
2000 28/09/2007 27/09/2007
2000 29/09/2007 28/09/2007
1000 30/09/2007 29/09/2007

Так как мы использовали offset 1, запрос возвращает предыдущий ORDER_DATE.

Если бы мы использовали offset 2 вместо этого, то ORDER_DATE вернул бы от 2 заказа до. Если бы мы использовали offset 3, то ORDER_DATE вернул бы от 3 заказов до …. и так далее.

Если мы хочем получить только заказы для данного product_id, то мы выполним следующий SQL запрос:

Получим результат:

ORDER_DATE PRODUCT_ID QTY
2000 26/09/2007
2000 28/09/2007 26/09/2007
2000 29/09/2007 28/09/2007

В этом примере, запрос вернул предыдущий ORDER_DATE для product_id = 2000 и игнорировал все другие заказы.

Смотри также в категории: Дополнительные функции Oracle / PLSQL