SQL-forsinkelse

Sql Forsinkelse



SQL lag()-funktionen giver dig adgang til den forrige række fra den aktuelle række med en specifik offset. Kort sagt, funktionen lag() giver dig adgang til den forrige række fra den nuværende. Ved at angive offsetværdien kan du få adgang til de foregående 1, 2, 3 osv. rækker fra den nuværende.

Det er det modsatte af lead()-funktionen, som giver dig adgang til efterfølgende rækker.







SQL Lag()

Funktionens syntaks er som følger:



LAG(værdiudtryk, offset [, standard])
OVER (
[PARTITION BY partition_expression]
BESTIL EFTER sort_udtryk [ASC | DESC]
);

Følgende er de understøttede argumenter:



  • værdiudtryk – Det angiver returværdien for den foregående række. Udtrykket skal evalueres til en enkelt værdi.
  • offset – Det specificerer, hvor mange rækker tilbage fra den aktuelle række, der skal tilgås.
  • Standard – Den indstiller standardværdien, hvis forskydningen er uden for partitionens omfang. Som standard er værdien sat til NULL.
  • Opdeling af – Det specificerer, hvordan dataene skal partitioneres.
  • Bestil pr – Den indstiller rækkefølgeformatet for rækkerne i hver partition.

Eksempel på dataopsætning

Før vi dykker ned i funktionsmåden af ​​lag()-funktionen, lad os starte med at opsætte en grundlæggende tabel til demonstrationsformål.





OPRET TABLE produkter (
product_id INT PRIMARY KEY AUTO_INCREMENT,
produktnavn VARCHAR(255),
kategori VARCHAR(255),
pris DECIMAL(10; 2),
mængde INT,
udløbsdato DATE,
stregkode BIGINT
);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Kokkehat 25cm',
'bageri',
24,67,
57,
'2023-09-09',
2854509564204);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Vagtelæg - dåse',
'spisekammer',
17,99,
67,
'2023-09-29',
1708039594250);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Kaffe - Egg Nog Capuccino',
'bageri',
92,53,
10,
'2023-09-22',
8704051853058);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Pære - stikkende',
'bageri',
65,29,
48,
'2023-08-23',
5174927442238);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Pasta - Angel Hair',
'spisekammer',
48,38,
59,
'2023-08-05',
8008123704782);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Vin - Prosecco Valdobiaddene',
'fremstille',
44,18,
3,
'2023-03-13',
6470981735653);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Brød - Fransk Mini Assorteret',
'spisekammer',
36,73,
52,
'2023-05-29',
5963886298051);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Orange - dåse, mandarin',
'fremstille',
65,0,
1,
'2023-04-20',
6131761721332);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Svinekød - Skulder',
'fremstille',
55,55,
73,
'2023-05-01',
9343592107125);

indsætte
ind i
produkter (produktnavn,
kategori,
pris,
antal,
udløbsdato,
stregkode)
værdier ('Dc Hikiage Hira Huba',
'fremstille',
56,29,
53,
'2023-04-14',
3354910667072);

Lad os fortsætte med at diskutere et par eksempler, mens oprettelsen og opsætningen er fuldført.

Eksempel 1: Grundlæggende brug

I dette tilfælde har vi adgang til en 'produkter'-tabel, der indeholder produktinformationen. Antag, at vi ønsker at hente den forrige stregkode fra den aktuelle række.



Vi kan bruge lag()-funktionen som følger:

Vælg
produktnavn,
pris,
lag(stregkode) over (partition efter kategori
bestil efter
pris asc) som forrige_vare
fra
produkter p;

Den givne kode opdeler dataene baseret på kategorien. Den henter derefter den forrige stregkode i partitionen ved hjælp af lag()-funktionen.

Det resulterende output er som følger:

Eksempel 2: Indstilling af standardværdi

Hvis der ikke er nogen tidligere række i en specifik kolonne (uden for grænsen), sætter funktionen værdien til NULL som vist i det foregående eksempel.

For at indstille en standardværdi for enhver adgang uden for området kan vi gøre følgende:

Vælg
produktnavn,
pris,
lag(stregkode, 1, 'N/A') over (partition efter kategori
bestil efter
pris asc) som forrige_vare
fra
produkter p;

Vi sætter standardværdien til 'N/A'. Dette bør erstatte enhver out-of-bound værdi som vist i outputtet:

Eksempel 3: Custom Offset-værdi

Antag, at du vil have adgang til de to foregående rækker fra den aktuelle række. Det kan vi gøre ved at sætte offsetværdien til 2.

Et eksempel på en forespørgsel er illustreret i det følgende:

Vælg
produktnavn,
pris,
lag(stregkode, 2, 'N/A') over (partition efter kategori
bestil efter
pris asc) som forrige_vare
fra
produkter p;

Produktion:

Denne forespørgsel returnerer de to foregående rækker i hver partition.

Konklusion

I denne tutorial lærte vi, hvordan man arbejder med lag()-funktionen for at hente det forrige element fra den aktuelle række.