SQL-vertraging

Sql Vertraging



Met de SQL lag()-functie kunt u vanaf de huidige rij met een specifieke offset toegang krijgen tot de vorige rij. Kortom, met de lag()-functie kunt u vanaf de huidige rij toegang krijgen tot de vorige rij. Door de offsetwaarde op te geven, kunt u vanaf de huidige rij toegang krijgen tot de vorige 1, 2, 3, enz. rijen.

Het is het tegenovergestelde van de functie lead() waarmee u toegang krijgt tot volgende rijen.







SQL-vertraging()

De syntaxis van de functie is als volgt:



LAG(waarde_expressie, verschuiving [, standaard])
OVER (
[PARTITIE DOOR partitie_expressie]
BESTEL OP sort_expression [ASC | BESCHRIJVING]
);

Dit zijn de ondersteunde argumenten:



  • waarde_expressie – Het specificeert de retourwaarde van de voorgaande rij. De expressie moet resulteren in één enkele waarde.
  • gecompenseerd – Het specificeert hoeveel rijen achteruit vanaf de huidige rij toegankelijk zijn.
  • standaard – Het stelt de standaardwaarde in als de offset buiten het bereik van de partitie valt. Standaard is de waarde ingesteld op NULL.
  • Partitie door – Het specificeert hoe de gegevens moeten worden gepartitioneerd.
  • Bestel per – Het stelt het orderformaat in voor de rijen in elke partitie.

Voorbeeldgegevens instellen

Voordat we ingaan op de werking van de lag()-functie, moeten we eerst een basistabel opzetten voor demonstratiedoeleinden.





MAAK TAFEL producten (
product_id INT PRIMAIRE SLEUTEL AUTO_INCREMENT,
productnaam VARCHAR(255),
categorie VARCHAR(255),
prijs DECIMAAL(10, 2),
hoeveelheid INT,
vervaldatum DATUM,
streepjescode BIGINT
);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Koksmuts 25cm',
'bakkerij',
24.67,
57,
'09-09-2023',
2854509564204);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Kwarteleitjes - ingeblikt',
'voorraadkast',
17.99,
67,
'29-09-2023',
1708039594250);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Koffie - Egg Nog Capuccino',
'bakkerij',
92.53,
10,
'22-09-2023',
8704051853058);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Peer - Stekelig',
'bakkerij',
65.29,
48,
'23-08-2023',
5174927442238);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Pasta - Engelenhaar',
'voorraadkast',
48.38,
59,
'2023-08-05',
8008123704782);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden('Wijn - Prosecco Valdobiaddene',
'produceren',
44.18,
3,
'2023-03-13',
6470981735653);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Gebak - Frans Mini Assortiment',
'voorraadkast',
36.73,
52,
'29-05-2023',
5963886298051);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Oranje - Ingeblikt, Mandarijn',
'produceren',
65,0,
1,
'20-04-2023',
6131761721332);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden ('Varkensvlees - Schouder',
'produceren',
55,55,
73,
'2023-05-01',
9343592107125);

invoegen
naar binnen
producten (productnaam,
categorie,
prijs,
hoeveelheid,
uiterste houdbaarheidsdatum,
streepjescode)
waarden('Dc Hikiage Hira Huba',
'produceren',
56.29,
53,
'2023-04-14',
3354910667072);

Nu het maken en instellen van de gegevens is voltooid, gaan we verder met het bespreken van enkele voorbeelden.

Voorbeeld 1: Basisgebruik

In dit geval hebben we toegang tot een tabel “producten” die de productinformatie bevat. Stel dat we de vorige streepjescode uit de huidige rij willen halen.



We kunnen de lag()-functie als volgt gebruiken:

selecteren
productnaam,
prijs,
lag(barcode) over (partitie op categorie
bestel door
prijs oplopend) als vorig_item
van
producten p;

De gegeven code verdeelt de gegevens op basis van de categorie. Vervolgens haalt het de vorige streepjescode in de partitie op met behulp van de lag()-functie.

De resulterende uitvoer is als volgt:

Voorbeeld 2: De standaardwaarde instellen

Als er geen vorige rij in een specifieke kolom is (buiten bereik), stelt de functie de waarde in op NULL, zoals weergegeven in het vorige voorbeeld.

Om een ​​standaardwaarde in te stellen voor toegang die buiten het bereik valt, kunnen we het volgende doen:

selecteren
productnaam,
prijs,
lag(barcode, 1, 'N.v.t.') over (partitie op categorie
bestel door
prijs oplopend) als vorig_item
van
producten p;

We hebben de standaardwaarde ingesteld op “N.v.t.”. Dit zou elke buitengrenswaarde moeten vervangen, zoals weergegeven in de uitvoer:

Voorbeeld 3: Aangepaste offsetwaarde

Stel dat u vanuit de huidige rij toegang wilt krijgen tot de vorige twee rijen. We kunnen dat doen door de offsetwaarde in te stellen op 2.

Een voorbeeldquery wordt hieronder geïllustreerd:

selecteren
productnaam,
prijs,
lag(barcode, 2, 'N.v.t.') over (partitie op categorie
bestel door
prijs oplopend) als vorig_item
van
producten p;

Uitgang:

Deze query retourneert de vorige twee rijen in elke partitie.

Conclusie

In deze tutorial hebben we geleerd hoe we met de lag()-functie kunnen werken om het vorige item uit de huidige rij te halen.