SQL Lag

Sql Lag



Binibigyang-daan ka ng SQL lag() function na i-access ang nakaraang row mula sa kasalukuyang row sa isang partikular na offset. Sa madaling salita, ang lag() function ay nagbibigay-daan sa iyo upang ma-access ang nakaraang row mula sa kasalukuyang isa. Sa pamamagitan ng pagtukoy sa halaga ng offset, maaari mong ma-access ang nakaraang 1, 2, 3, atbp., na mga hilera mula sa kasalukuyang isa.

Ito ay ang kabaligtaran ng lead() function na nagbibigay-daan sa iyo upang ma-access ang kasunod na mga hilera.







SQL Lag()

Ang function syntax ay ang mga sumusunod:



LAG(value_expression, offset [, default])
TAPOS (
[PARTITION BY partition_expression]
ORDER BY sort_expression [ASC | DESC]
);

Ang mga sumusunod ay ang mga sinusuportahang argumento:



  • value_expression – Tinutukoy nito ang return value ng naunang row. Ang expression ay dapat suriin sa isang solong halaga.
  • offset – Tinutukoy nito kung gaano karaming mga hilera ang paatras mula sa kasalukuyang hilera upang ma-access.
  • default – Itinatakda nito ang default na halaga kung ang offset ay nasa labas ng saklaw ng partition. Bilang default, ang halaga ay nakatakda sa NULL.
  • Paghati sa pamamagitan ng – Tinutukoy nito kung paano hatiin ang data.
  • Iniutos ni – Itinatakda nito ang format ng order para sa mga row sa bawat partition.

Sample na Setup ng Data

Bago tayo sumisid sa paggana ng lag() function, magsimula tayo sa pamamagitan ng pag-set up ng isang pangunahing talahanayan para sa mga layunin ng pagpapakita.





GUMAWA NG MGA produkto ng TABLE (
product_id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(255),
kategorya VARCHAR(255),
presyong DECIMAL(10, 2),
dami INT,
expiration_date DATE,
barcode BIGINT
);

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Chef Hat 25cm',
'bakery',
24.67,
57,
'2023-09-09',
2854509564204);

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Quail Egg - Canned',
'pantry',
17.99,
67,
'2023-09-29',
1708039594250);

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Kape - Egg Nog Capuccino',
'bakery',
92.53,
10,
'2023-09-22',
8704051853058);

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Pear - Prickly',
'bakery',
65.29,
48,
'2023-08-23',
5174927442238);

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Pasta - Angel Hair',
'pantry',
48.38,
59,
'2023-08-05',
8008123704782);

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Wine - Prosecco Valdobiaddene',
'produce',
44.18,
3,
'2023-03-13',
6470981735653);

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Pastry - French Mini Assorted',
'pantry',
36.73,
52,
'2023-05-29',
5963886298051);

ipasok
sa
mga produkto (pangalan_produkto,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Orange - Canned, Mandarin',
'produce',
65.0,
1,
'2023-04-20',
6131761721332);

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Baboy - Balikat',
'produce',
55.55,
73,
'2023-05-01',
9343592107125);

ipasok
sa
mga produkto (product_name,
kategorya,
presyo,
dami,
Petsa ng pagkawalang bisa,
barcode)
mga halaga ('Dc Hikiage Hira Huba',
'produce',
56.29,
53,
'2023-04-14',
3354910667072);

Nang kumpleto na ang paggawa at pag-setup ng data, magpatuloy tayo sa pagtalakay ng ilang halimbawa.

Halimbawa 1: Pangunahing Paggamit

Sa kasong ito, mayroon kaming access sa isang talahanayan ng 'mga produkto' na naglalaman ng impormasyon ng produkto. Ipagpalagay na gusto naming makuha ang nakaraang barcode mula sa kasalukuyang hilera.



Maaari naming gamitin ang lag() function tulad ng sumusunod:

pumili
pangalan ng Produkto,
presyo,
lag(barcode) over (partition ayon sa kategorya
Iniutos ni
presyo asc) bilang previous_item
mula sa
mga produkto p;

Ang ibinigay na code ay naghahati sa data batay sa kategorya. Pagkatapos ay kinukuha nito ang nakaraang barcode sa partition gamit ang lag() function.

Ang resultang output ay ang mga sumusunod:

Halimbawa 2: Pagtatakda ng Default na Halaga

Kung walang nakaraang row sa isang partikular na column (out of bound), itinatakda ng function ang value sa NULL gaya ng ipinapakita sa nakaraang halimbawa.

Upang magtakda ng default na halaga para sa anumang hindi saklaw na pag-access, magagawa namin ang sumusunod:

pumili
pangalan ng Produkto,
presyo,
lag(barcode, 1, 'N/A') over (partition ayon sa kategorya
Iniutos ni
presyo asc) bilang previous_item
mula sa
mga produkto p;

Itinakda namin ang default na halaga sa 'N/A'. Dapat nitong palitan ang anumang out-of-bound na halaga tulad ng ipinapakita sa output:

Halimbawa 3: Custom na Offset na Halaga

Ipagpalagay na gusto mong i-access ang nakaraang dalawang row mula sa kasalukuyang row. Magagawa natin iyon sa pamamagitan ng pagtatakda ng offset na halaga sa 2.

Ang isang halimbawang query ay inilalarawan sa sumusunod:

pumili
pangalan ng Produkto,
presyo,
lag(barcode, 2, 'N/A') over (partition ayon sa kategorya
Iniutos ni
presyo asc) bilang previous_item
mula sa
mga produkto p;

Output:

Ibinabalik ng query na ito ang nakaraang dalawang row sa bawat partition.

Konklusyon

Sa tutorial na ito, natutunan namin kung paano gamitin ang lag() function upang makuha ang nakaraang item mula sa kasalukuyang row.