SQL-forsinkelse

Sql Forsinkelse



SQL lag()-funksjonen lar deg få tilgang til forrige rad fra gjeldende rad med en bestemt forskyvning. Kort sagt lar lag()-funksjonen deg få tilgang til forrige rad fra den gjeldende. Ved å spesifisere forskyvningsverdien kan du få tilgang til de foregående 1, 2, 3, osv. radene fra den gjeldende.

Det er det motsatte av lead()-funksjonen som lar deg få tilgang til påfølgende rader.







SQL Lag()

Funksjonssyntaksen er som følger:



LAG(verdiuttrykk, offset [, standard])
OVER (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
);

Følgende er argumentene som støttes:



  • verdiuttrykk – Den spesifiserer returverdien til den foregående raden. Uttrykket må evalueres til én enkelt verdi.
  • offset – Den spesifiserer hvor mange rader bakover fra gjeldende rad for tilgang.
  • misligholde – Den angir standardverdien hvis forskyvningen er utenfor omfanget av partisjonen. Som standard er verdien satt til NULL.
  • Deling av – Den spesifiserer hvordan dataene skal partisjoneres.
  • Rekkefølge etter – Den angir rekkefølgeformatet for radene i hver partisjon.

Eksempel på dataoppsett

Før vi dykker inn i funksjonene til lag()-funksjonen, la oss starte med å sette opp en grunnleggende tabell for demonstrasjonsformål.





CREATE TABLE-produkter (
product_id INT PRIMARY KEY AUTO_INCREMENT,
produktnavn VARCHAR(255),
kategori VARCHAR(255),
pris DESIMAL(10; 2),
mengde INT,
expiration_date DATE,
strekkode BIGINT
);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Kokkhatt 25cm',
'bakeri',
24,67,
57,
'2023-09-09',
2854509564204);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Vaktelegg - hermetikk',
'spiskammers',
17,99,
67,
'2023-09-29',
1708039594250);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Kaffe - Egg Nog Capuccino',
'bakeri',
92,53,
10,
'2023-09-22',
8704051853058);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Pære - stikkende',
'bakeri',
65,29,
48,
'2023-08-23',
5174927442238);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Pasta - Angel Hair',
'spiskammers',
48,38,
59,
'2023-08-05',
8008123704782);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Vin - Prosecco Valdobiaddene',
'produsere',
44,18,
3,
'2023-03-13',
6470981735653);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Pastry - French Mini Assorted',
'spiskammers',
36,73,
52,
'2023-05-29',
5963886298051);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Oransje - Hermetikk, Mandarin',
'produsere',
65,0,
1,
'2023-04-20',
6131761721332);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Svinekjøtt - Skulder',
'produsere',
55,55,
73,
'2023-05-01',
9343592107125);

sett inn
inn i
produkter (produktnavn,
kategori,
pris,
mengde,
utløpsdato,
strekkode)
verdier ('Dc Hikiage Hira Huba',
'produsere',
56,29,
53,
'2023-04-14',
3354910667072);

Med dataopprettingen og oppsettet fullført, la oss fortsette å diskutere noen få eksempler.

Eksempel 1: Grunnleggende bruk

I dette tilfellet har vi tilgang til en 'produkter'-tabell som inneholder produktinformasjonen. Anta at vi ønsker å hente den forrige strekkoden fra gjeldende rad.



Vi kan bruke lag()-funksjonen som følger:

plukke ut
Produktnavn,
pris,
lag(strekkode) over (partisjon etter kategori
rekkefølge etter
pris asc) som forrige_vare
fra
produkter p;

Den gitte koden deler opp dataene basert på kategorien. Den henter deretter den forrige strekkoden i partisjonen ved å bruke lag()-funksjonen.

Den resulterende utgangen er som følger:

Eksempel 2: Angi standardverdi

Hvis det ikke er noen tidligere rad i en bestemt kolonne (utenfor grensen), setter funksjonen verdien til NULL som vist i forrige eksempel.

For å angi en standardverdi for tilgang utenfor omfanget, kan vi gjøre følgende:

plukke ut
Produktnavn,
pris,
lag(strekkode, 1, 'N/A') over (partisjon etter kategori
rekkefølge etter
pris asc) som forrige_vare
fra
produkter p;

Vi setter standardverdien til 'N/A'. Dette bør erstatte enhver verdi utenfor grensen som vist i utdataene:

Eksempel 3: Egendefinert forskyvningsverdi

Anta at du vil ha tilgang til de to foregående radene fra gjeldende rad. Vi kan gjøre det ved å sette offsetverdien til 2.

Et eksempelspørsmål er illustrert i følgende:

plukke ut
Produktnavn,
pris,
lag(strekkode, 2, 'N/A') over (partisjon etter kategori
rekkefølge etter
pris asc) som forrige_vare
fra
produkter p;

Produksjon:

Denne spørringen returnerer de to foregående radene i hver partisjon.

Konklusjon

I denne opplæringen lærte vi hvordan vi jobber med lag()-funksjonen for å hente forrige element fra gjeldende rad.