SQL lead()-funksjonen lar deg få tilgang til neste rad fra gjeldende rad med en bestemt forskyvning. Kort sagt lar lead()-funksjonen deg få tilgang til neste rad fra den gjeldende. Ved å spesifisere forskyvningsverdien kan du få tilgang til de neste 1, 2, 3, osv. radene fra den gjeldende.
Det er det motsatte av lag()-funksjonen som lar deg få tilgang til de forrige radene.
SQL Lead() funksjon
Funksjonssyntaksen er som følger:
LEAD(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 fremover fra gjeldende rad for å få 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 hvordan lead()-funksjonen fungerer, la oss starte med å sette opp den grunnleggende tabellen 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);
Eksempel 1:
I dette tilfellet har vi tilgang til 'produkter'-tabellen som inneholder produktinformasjonen. Anta at vi ønsker å få neste strekkode fra gjeldende rad.
Vi kan bruke lead()-funksjonen som følger:
Anta at vi har en tabell som inneholder en ansattinformasjon som følger:
plukke utProduktnavn,
pris,
bly(strekkode) over (partisjon etter kategori
rekkefølge etter
pris asc) som neste_vare
fra
produkter p;
Den gitte koden deler opp dataene basert på kategorien. Den henter deretter neste strekkode i partisjonen ved å bruke lead()-funksjonen.
Den resulterende utgangen er som følger:
Eksempel 2:
Hvis det ikke er noen neste 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 utProduktnavn,
pris,
lead(strekkode, 1, 'N/A') over (partisjon etter kategori
rekkefølge etter
pris asc) som neste_vare
fra
produkter p;
Vi setter standardverdien til 'N/A'. Dette bør erstatte enhver verdi utenfor grensen som vist i følgende utdata:
MERK : Å sette offset til 1 ligner på å ikke spesifisere noen verdi.
Eksempel 3:
Anta at du vil ha tilgang til de to neste radene fra gjeldende rad. Vi kan gjøre det ved å sette offsetverdien til 2.
Et eksempelspørsmål er illustrert i følgende:
plukke utProduktnavn,
pris,
lead(strekkode, 2, 'N/A') over (partisjon etter kategori
rekkefølge etter
pris asc) som neste_vare
fra
produkter p;
Denne spørringen returnerer de neste to radene i hver partisjon som vist i følgende:
Der har du det!
Konklusjon
I denne opplæringen lærte vi hvordan du arbeider med lead()-funksjonen for å hente neste element fra gjeldende rad.