Функция 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(), чтобы получить предыдущий элемент из текущей строки.