SQL-fördröjning

Sql Fordrojning



Funktionen SQL lag() låter dig komma åt föregående rad från den aktuella raden med en specifik offset. Kort sagt låter lag()-funktionen dig komma åt föregående rad från den nuvarande. Genom att ange offsetvärdet kan du komma åt de föregående 1, 2, 3, etc. rader från den nuvarande.

Det är motsatsen till funktionen lead() som låter dig komma åt efterföljande rader.







SQL fördröjning()

Funktionens syntax är som följer:



LAG(värdeuttryck, offset [, standard])
ÖVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
);

Följande är de argument som stöds:



  • värde_uttryck – Den anger returvärdet för föregående rad. Uttrycket måste utvärderas till ett enda värde.
  • offset – Den anger hur många rader bakåt från den aktuella raden som ska komma åt.
  • standard – Den ställer in standardvärdet om förskjutningen ligger utanför partitionens omfång. Som standard är värdet satt till NULL.
  • Partition av – Den anger hur data ska partitioneras.
  • Sortera efter – Den ställer in ordningsformatet för raderna i varje partition.

Exempel på datainställning

Innan vi dyker in i hur lag()-funktionen fungerar, låt oss börja med att skapa en grundläggande tabell för demonstrationsändamål.





CREATE TABLE-produkter (
product_id INT PRIMARY KEY AUTO_INCREMENT,
produktnamn VARCHAR(255),
kategori VARCHAR(255),
pris DECIMAL(10; 2),
kvantitet INT,
expiration_date DATE,
streckkod BIGINT
);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Kockmössa 25cm',
'bageri',
24,67,
57,
'2023-09-09',
2854509564204);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Vaktelägg - konserverade',
'skafferi',
17,99,
67,
'2023-09-29',
1708039594250);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Kaffe - Egg Nog Capuccino',
'bageri',
92,53,
10,
'2023-09-22',
8704051853058);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Pear - Prickly',
'bageri',
65,29,
48,
'2023-08-23',
5174927442238);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Pasta - Angel Hair',
'skafferi',
48,38,
59,
'2023-08-05',
8008123704782);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Vin - Prosecco Valdobiaddene',
'producera',
44,18,
3,
'2023-03-13',
6470981735653);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Pastry - French Mini Assorted',
'skafferi',
36,73,
52,
'2023-05-29',
5963886298051);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Orange - konserverad, mandarin',
'producera',
65,0,
1,
'2023-04-20',
6131761721332);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Fläsk - Axel',
'producera',
55,55,
73,
'2023-05-01',
9343592107125);

Föra in
in i
produkter (produktnamn,
kategori,
pris,
kvantitet,
utgångsdatum,
streckkod)
värden ('Dc Hikiage Hira Huba',
'producera',
56,29,
53,
'2023-04-14',
3354910667072);

När dataskapandet och installationen är klar, låt oss fortsätta för att diskutera några exempel.

Exempel 1: Grundläggande användning

I det här fallet har vi tillgång till en 'produkter'-tabell som innehåller produktinformationen. Anta att vi vill hämta den föregående streckkoden från den aktuella raden.



Vi kan använda lag()-funktionen enligt följande:

Välj
produktnamn,
pris,
lag(streckkod) över (partition efter kategori
sortera efter
pris asc) som föregående_artikel
från
produkter p;

Den givna koden delar upp data baserat på kategorin. Den hämtar sedan den tidigare streckkoden i partitionen med hjälp av lag()-funktionen.

Resultatet är som följer:

Exempel 2: Inställning av standardvärde

Om det inte finns någon tidigare rad i en specifik kolumn (utanför gränsen), sätter funktionen värdet till NULL som visas i föregående exempel.

För att ställa in ett standardvärde för åtkomst utanför omfattningen kan vi göra följande:

Välj
produktnamn,
pris,
lag(streckkod, 1, 'N/A') över (partition efter kategori
sortera efter
pris asc) som föregående_artikel
från
produkter p;

Vi sätter standardvärdet till 'N/A'. Detta bör ersätta alla out-of-bound värden som visas i utdata:

Exempel 3: Anpassat offsetvärde

Anta att du vill komma åt de två föregående raderna från den aktuella raden. Vi kan göra det genom att sätta offsetvärdet till 2.

Ett exempel på en fråga illustreras i följande:

Välj
produktnamn,
pris,
lag(streckkod, 2, 'N/A') över (partition efter kategori
sortera efter
pris asc) som föregående_artikel
från
produkter p;

Produktion:

Denna fråga returnerar de två föregående raderna i varje partition.

Slutsats

I den här handledningen lärde vi oss hur man arbetar med lag()-funktionen för att hämta föregående objekt från den aktuella raden.