SQL забавяне

Sql Zabavane



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

Това е обратното на функцията lead(), която ви позволява достъп до следващите редове.







SQL Lag()

Синтаксисът на функцията е както следва:



LAG(стойност_израз, отместване [, по подразбиране])
НАД (
[ДЯЛ ПО partition_expression]
ПОРЪЧАЙТЕ ПО израз_за_сортиране [ASC | DESC]
);

Следните са подкрепените аргументи:



  • стойностен_израз – Указва върнатата стойност на предходния ред. Изразът трябва да се изчисли на една стойност.
  • изместване – Указва колко реда назад от текущия ред за достъп.
  • по подразбиране – Задава стойността по подразбиране, ако отместването е извън обхвата на дяла. По подразбиране стойността е зададена на NULL.
  • Разделяне по – Указва как да се разделят данните.
  • Подредени по – Задава формата на реда за редовете във всеки дял.

Настройка на примерни данни

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





CREATE TABLE продукти (
product_id INT PRIMARY KEY AUTO_INCREMENT,
име на продукт VARCHAR(255),
категория VARCHAR(255),
цена DECIMAL(10, 2),
количество INT,
дата на изтичане DATE,
баркод BIGINT
);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Шапка на готвач 25 см“,
'пекарна',
24.67,
57,
„2023-09-09“,
2854509564204);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Пъдпъдъчи яйца – консерва“,
'килер',
17,99,
67,
„29 септември 2023 г.“,
1708039594250);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Кафе – Egg Nog Capuccino“,
'пекарна',
92.53,
10,
„22 септември 2023 г.“,
8704051853058);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Круша – бодлива“,
'пекарна',
65.29,
48,
„23 август 2023 г.“,
5174927442238);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
ценности („Паста – ангелска коса“,
'килер',
48.38,
59,
„2023-08-05“,
8008123704782);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Вино – Prosecco Valdobiaddene“,
'произвеждам',
44.18,
3,
„13 март 2023 г.“,
6470981735653);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Сладкиши – френски мини асорти“,
'килер',
36.73,
52,
„2023-05-29“,
5963886298051);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Портокал – консерва, мандарина“,
'произвеждам',
65,0,
1,
„20.04.2023“,
6131761721332);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Свинско – плешка“,
'произвеждам',
55.55,
73,
'2023-05-01',
9343592107125);

вмъкнете
в
продукти (име_на_продукт,
категория,
цена,
количество,
срок на годност,
баркод)
стойности („Dc Hikiage Hira Huba“,
'произвеждам',
56.29,
53,
„14.04.2023“,
3354910667072);

След като създаването и настройката на данните приключи, нека продължим да обсъждаме няколко примера.

Пример 1: Основна употреба

В този случай имаме достъп до таблица „продукти“, която съдържа информацията за продукта. Да предположим, че искаме да получим предишния баркод от текущия ред.



Можем да използваме функцията lag() както следва:

изберете
Име на продукта,
цена,
изоставане (баркод) над (разделяне по категория
подредени по
price asc) като предишен_артикул
от
продукти p;

Даденият код разделя данните въз основа на категорията. След това извлича предишния баркод в дяла с помощта на функцията lag().

Резултатът е както следва:

Пример 2: Задаване на стойността по подразбиране

Ако няма предишен ред в конкретна колона (извън границите), функцията задава стойността на NULL, както е показано в предишния пример.

За да зададем стойност по подразбиране за всеки достъп извън обхвата, можем да направим следното:

изберете
Име на продукта,
цена,
lag(barcode, 1, 'N/A') над (разделяне по категория
подредени по
price asc) като предишен_артикул
от
продукти p;

Задаваме стойността по подразбиране на „N/A“. Това трябва да замени всяка стойност извън границите, както е показано в изхода:

Пример 3: Персонализирана стойност на отместване

Да предположим, че искате да получите достъп до предишните два реда от текущия ред. Можем да направим това, като зададем стойността на отместването на 2.

Примерна заявка е илюстрирана по-долу:

изберете
Име на продукта,
цена,
lag(barcode, 2, 'N/A') над (разделяне по категория
подредени по
price asc) като предишен_артикул
от
продукти p;

Изход:

Тази заявка връща предишните два реда във всеки дял.

Заключение

В този урок научихме как да работим с функцията lag(), за да получим предишния елемент от текущия ред.