SQL-лаг

Sql Lag



Функция SQL lag() позволяет получить доступ к предыдущей строке из текущей строки с определенным смещением. Короче говоря, функция lag() позволяет вам получить доступ к предыдущей строке из текущей. Указав значение смещения, вы можете получить доступ к предыдущим 1, 2, 3 и т. д. строкам из текущей.

Это противоположность функции lead(), которая позволяет вам получать доступ к последующим строкам.







Задержка SQL()

Синтаксис функции следующий:



LAG(выражение_значения, смещение [, по умолчанию])
НАД (
[РАЗДЕЛ ПО выражению_раздела]
ПОРЯДОК ПО выражению_сортировки [ASC | DESC]
);

Ниже приведены поддерживаемые аргументы:



  • выражение_значения – Он определяет возвращаемое значение предыдущей строки. Выражение должно иметь одно значение.
  • компенсировать – Он указывает, на сколько строк назад от текущей строки можно получить доступ.
  • по умолчанию – Устанавливает значение по умолчанию, если смещение выходит за пределы раздела. По умолчанию значение установлено в NULL.
  • Разделить по – Он определяет, как разделить данные.
  • Сортировать по – Он устанавливает формат порядка строк в каждом разделе.

Пример настройки данных

Прежде чем мы углубимся в работу функции lag(), давайте начнем с настройки базовой таблицы для демонстрационных целей.





СОЗДАТЬ ТАБЛИЦУ продуктов (
product_id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT,
имя_продукта VARCHAR(255),
категория ВАРЧАР(255),
цена ДЕСЯТИЧНАЯ(10, 2),
количество INT,
истечение_даты ДАТА,
штрих-код БИГИНТ
);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
значения («Шляпа шеф-повара 25 см»,
'пекарня',
24.67,
57,
'2023-09-09',
2854509564204);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Яйца перепелиные - консервированные»,
'кладовая',
17.99,
67,
'29 сентября 2023 г.',
1708039594250);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Кофе – Эгг Ног Капучино»,
'пекарня',
92,53,
10,
'22 сентября 2023 г.',
8704051853058);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Груша – Колючая»,
'пекарня',
65,29,
48,
'23 августа 2023 г.',
5174927442238);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Макароны - Волосы ангела»,
'кладовая',
48,38,
59,
'2023-08-05',
8008123704782);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Вино - Просекко Вальдобьяддене»,
'производить',
44.18,
3,
'2023-03-13',
6470981735653);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Кондитерские изделия – французское мини-ассорти»,
'кладовая',
36,73,
52,
'29 мая 2023 г.',
5963886298051);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Апельсин – консервированный, мандарин»,
'производить',
65,0,
1,
'20 апреля 2023 г.',
6131761721332);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Свинина – лопатка»,
'производить',
55,55,
73,
'2023-05-01',
9343592107125);

вставлять
в
продукты (имя_продукта,
категория,
цена,
количество,
Дата окончания срока,
штрих-код)
ценности («Дк Хикиаге Хира Хуба»,
'производить',
56,29,
53,
'2023-04-14',
3354910667072);

Закончив создание и настройку данных, давайте перейдем к обсуждению нескольких примеров.

Пример 1: базовое использование

В этом случае у нас есть доступ к таблице «продукты», содержащей информацию о продукте. Предположим, мы хотим получить предыдущий штрих-код из текущей строки.



Мы можем использовать функцию lag() следующим образом:

выбирать
наименование товара,
цена,
отставание (штрих-код) над (раздел по категориям
Сортировать по
цена по возрастанию) как предыдущий_элемент
от
продукты р;

Данный код разделяет данные по категориям. Затем он извлекает предыдущий штрих-код в разделе с помощью функции lag().

Полученный результат выглядит следующим образом:

Пример 2: Установка значения по умолчанию

Если в определенном столбце нет предыдущей строки (вне границы), функция устанавливает значение NULL, как показано в предыдущем примере.

Чтобы установить значение по умолчанию для любого доступа за пределами области видимости, мы можем сделать следующее:

выбирать
наименование товара,
цена,
lag(barcode, 1, 'N/A') over (раздел по категориям
Сортировать по
цена по возрастанию) как предыдущий_элемент
от
продукты р;

Мы устанавливаем значение по умолчанию «Н/Д». Это должно заменить любое выходное значение, как показано в выводе:

Пример 3: Пользовательское значение смещения

Предположим, вы хотите получить доступ к двум предыдущим строкам из текущей строки. Мы можем сделать это, установив значение смещения равным 2.

Пример запроса проиллюстрирован следующим образом:

выбирать
наименование товара,
цена,
lag(barcode, 2, 'N/A') over (раздел по категориям
Сортировать по
цена по возрастанию) как предыдущий_элемент
от
продукты р;

Выход:

Этот запрос возвращает две предыдущие строки в каждом разделе.

Заключение

В этом уроке мы узнали, как работать с функцией lag(), чтобы получить предыдущий элемент из текущей строки.