ความล่าช้าของ SQL

Khwam Lacha Khxng Sql



ฟังก์ชัน SQL lag() ช่วยให้คุณเข้าถึงแถวก่อนหน้าจากแถวปัจจุบันที่ออฟเซ็ตเฉพาะ กล่าวโดยสรุป ฟังก์ชัน lag() ช่วยให้คุณเข้าถึงแถวก่อนหน้าจากแถวปัจจุบันได้ ด้วยการระบุค่าออฟเซ็ต คุณสามารถเข้าถึงแถว 1, 2, 3 ฯลฯ ก่อนหน้าจากแถวปัจจุบันได้

มันอยู่ตรงข้ามกับฟังก์ชัน lead() ซึ่งช่วยให้คุณเข้าถึงแถวถัดไปได้







ความล่าช้าของ SQL()

ไวยากรณ์ของฟังก์ชันมีดังนี้:



LAG(value_expression, ออฟเซ็ต [, ค่าเริ่มต้น])
เกิน (
[แบ่งตาม partition_expression]
เรียงลำดับตาม sort_expression [ASC | รายละเอียด]
);

ต่อไปนี้เป็นข้อโต้แย้งที่ได้รับการสนับสนุน:



  • ค่า_การแสดงออก – ระบุค่าตอบแทนของแถวก่อนหน้า นิพจน์ต้องประเมินเป็นค่าเดียว
  • ชดเชย – ระบุจำนวนแถวย้อนหลังจากแถวปัจจุบันที่จะเข้าถึง
  • ค่าเริ่มต้น – จะตั้งค่าเริ่มต้นหากออฟเซ็ตอยู่นอกขอบเขตของพาร์ติชัน ตามค่าเริ่มต้น ค่าจะถูกตั้งเป็น NULL
  • แบ่งพาร์ติชั่นโดย – ระบุวิธีการแบ่งพาร์ติชันข้อมูล
  • สั่งโดย – กำหนดรูปแบบลำดับสำหรับแถวในแต่ละพาร์ติชัน

การตั้งค่าข้อมูลตัวอย่าง

ก่อนที่เราจะเจาะลึกการทำงานของฟังก์ชัน lag() ให้เราเริ่มต้นด้วยการตั้งค่าตารางพื้นฐานเพื่อวัตถุประสงค์ในการสาธิต





สร้างผลิตภัณฑ์ตาราง (
product_id INT คีย์หลัก AUTO_INCREMENT,
ชื่อผลิตภัณฑ์ VARCHAR(255)
หมวดหมู่ VARCHAR (255)
ราคา ทศนิยม(10, 2),
ปริมาณ INT,
expiration_date วันที่,
บาร์โค้ด BIGINT
);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่า ('หมวกเชฟ 25 ซม.',
'เบเกอรี่',
24.67,
57,
'2023-09-09',
2854509564204);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ไข่นกกระทา - กระป๋อง',
'ตู้กับข้าว',
17.99 น.
67,
'2023-09-29',
1708039594250);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('กาแฟ - Egg Nog Capuccino',
'เบเกอรี่',
92.53,
10,
'2023-09-22',
8704051853058);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ลูกแพร์ - เต็มไปด้วยหนาม',
'เบเกอรี่',
65.29,
48,
'23-08-2023',
5174927442238);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('พาสต้า - ผมนางฟ้า',
'ตู้กับข้าว',
48.38,
59,
'2023-08-05',
8008123704782);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ไวน์ - Prosecco Valdobiaddene',
'ผลิต',
44.18,
3,
'2023-03-13',
6470981735653);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่า ('ขนมอบ - เฟรนช์มินิคละ',
'ตู้กับข้าว',
36.73,
52,
'2023-05-29',
5963886298051);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('ส้ม - กระป๋อง, จีนกลาง',
'ผลิต',
65.0,
1,
'2023-04-20',
6131761721332);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('หมู-ไหล่',
'ผลิต',
55.55,
73,
'2023-05-01',
9343592107125);

แทรก
เข้าไปข้างใน
ผลิตภัณฑ์ (ชื่อผลิตภัณฑ์,
หมวดหมู่,
ราคา,
ปริมาณ,
วันหมดอายุ,
บาร์โค้ด)
ค่านิยม ('Dc Hikiage Hira Huba',
'ผลิต',
56.29,
53,
'2023-04-14',
3354910667072);

เมื่อการสร้างและตั้งค่าข้อมูลเสร็จสมบูรณ์แล้ว เราจะมาพูดถึงตัวอย่างบางส่วนกันต่อ

ตัวอย่างที่ 1: การใช้งานพื้นฐาน

ในกรณีนี้ เรามีสิทธิ์เข้าถึงตาราง 'ผลิตภัณฑ์' ที่มีข้อมูลผลิตภัณฑ์ สมมติว่าเราต้องการรับบาร์โค้ดก่อนหน้าจากแถวปัจจุบัน



เราสามารถใช้ฟังก์ชัน lag() ได้ดังนี้:

เลือก
ชื่อผลิตภัณฑ์,
ราคา,
lag(บาร์โค้ด) เกิน (แบ่งพาร์ติชันตามหมวดหมู่
สั่งโดย
ราคา asc) เป็น Previous_item
จาก
ผลิตภัณฑ์พี;

รหัสที่กำหนดแบ่งพาร์ติชันข้อมูลตามหมวดหมู่ จากนั้นจะดึงบาร์โค้ดก่อนหน้าในพาร์ติชันโดยใช้ฟังก์ชัน lag()

ผลลัพธ์ที่ได้จะเป็นดังนี้:

ตัวอย่างที่ 2: การตั้งค่าเริ่มต้น

หากไม่มีแถวก่อนหน้าในคอลัมน์ใดคอลัมน์หนึ่ง (ไม่อยู่ในขอบเขต) ฟังก์ชันจะตั้งค่าเป็น NULL ดังที่แสดงในตัวอย่างก่อนหน้านี้

หากต้องการตั้งค่าเริ่มต้นสำหรับการเข้าถึงนอกขอบเขต เราสามารถดำเนินการดังต่อไปนี้:

เลือก
ชื่อผลิตภัณฑ์,
ราคา,
lag(บาร์โค้ด, 1, 'N/A') เกิน (แบ่งพาร์ติชันตามหมวดหมู่
สั่งโดย
ราคา asc) เป็น Previous_item
จาก
ผลิตภัณฑ์พี;

เราตั้งค่าเริ่มต้นเป็น 'N/A' สิ่งนี้ควรแทนที่ค่านอกขอบเขตตามที่แสดงในเอาต์พุต:

ตัวอย่างที่ 3: ค่าออฟเซ็ตแบบกำหนดเอง

สมมติว่าคุณต้องการเข้าถึงสองแถวก่อนหน้าจากแถวปัจจุบัน เราสามารถทำได้โดยตั้งค่าออฟเซ็ตเป็น 2

แบบสอบถามตัวอย่างจะแสดงดังต่อไปนี้:

เลือก
ชื่อผลิตภัณฑ์,
ราคา,
lag(บาร์โค้ด, 2, 'N/A') เกิน (แบ่งพาร์ติชันตามหมวดหมู่
สั่งโดย
ราคา asc) เป็น Previous_item
จาก
ผลิตภัณฑ์พี;

เอาท์พุท:

แบบสอบถามนี้ส่งคืนสองแถวก่อนหน้าในแต่ละพาร์ติชัน

บทสรุป

ในบทช่วยสอนนี้ เราได้เรียนรู้วิธีทำงานกับฟังก์ชัน lag() เพื่อรับรายการก่อนหน้าจากแถวปัจจุบัน