השהיית SQL

Hshyyt Sql



הפונקציה SQL lag() מאפשרת לך לגשת לשורה הקודמת מהשורה הנוכחית בהיסט ספציפי. בקיצור, הפונקציה lag() מאפשרת לך לגשת לשורה הקודמת מהשורה הנוכחית. על ידי ציון ערך ההיסט, תוכל לגשת לשורות 1, 2, 3 וכו' הקודמות מהשורה הנוכחית.

זה ההפך מהפונקציה lead() המאפשרת לך לגשת לשורות עוקבות.







SQL Lag()

תחביר הפונקציה הוא כדלקמן:



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

להלן הטיעונים הנתמכים:



  • ביטוי_ערך – הוא מציין את ערך ההחזרה של השורה הקודמת. הביטוי חייב להעריך לערך בודד.
  • לְקַזֵז - הוא מציין כמה שורות אחורה מהשורה הנוכחית לגשת.
  • בְּרִירַת מֶחדָל - הוא קובע את ערך ברירת המחדל אם ההיסט הוא מחוץ להיקף המחיצה. כברירת מחדל, הערך מוגדר ל-NULL.
  • מחיצה על ידי - הוא מפרט כיצד לחלק את הנתונים.
  • מיין לפי - הוא מגדיר את פורמט הסדר עבור השורות בכל מחיצה.

הגדרת נתונים לדוגמה

לפני שנצלול לתוך פעולת הפונקציה lag(), הבה נתחיל בהגדרת טבלה בסיסית למטרות הדגמה.





צור מוצרי TABLE (
product_id INT PRIMARY KEY AUTO_INCREMENT,
product_name VARCHAR(255),
קטגוריה VARCHAR(255),
price DECIMAL(10, 2),
כמות INT,
expiration_date DATE,
ברקוד BIGINT
);

לְהַכנִיס
לְתוֹך
מוצרים (שם_מוצר,
קטגוריה,
מחיר,
כַּמוּת,
תאריך תפוגה,
ברקוד)
ערכים ('כובע שף 25 ס'מ',
'מַאֲפִיָה',
24.67,
57,
'2023-09-09',
2854509564204);

לְהַכנִיס
לְתוֹך
מוצרים (שם_מוצר,
קטגוריה,
מחיר,
כַּמוּת,
תאריך תפוגה,
ברקוד)
ערכים ('ביצי שליו - שימורים',
'מְזָוֶה',
17.99,
67,
'2023-09-29',
1708039594250);

לְהַכנִיס
לְתוֹך
מוצרים (שם_מוצר,
קטגוריה,
מחיר,
כַּמוּת,
תאריך תפוגה,
ברקוד)
ערכים ('קפה - קפוצ'ינו ביצה נוג',
'מַאֲפִיָה',
92.53,
10,
'2023-09-22',
8704051853058);

לְהַכנִיס
לְתוֹך
מוצרים (שם_מוצר,
קטגוריה,
מחיר,
כַּמוּת,
תאריך תפוגה,
ברקוד)
ערכים ('אגס - קוצני',
'מַאֲפִיָה',
65.29,
48,
'2023-08-23',
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(ברקוד) מעל (מחיצה לפי קטגוריה
מיין לפי
price asc) בתור פריט_קודם
מ
מוצרים p;

הקוד הנתון מחלק את הנתונים על סמך הקטגוריה. לאחר מכן הוא מביא את הברקוד הקודם במחיצה באמצעות הפונקציה lag() .

הפלט המתקבל הוא כדלקמן:

דוגמה 2: הגדרת ערך ברירת המחדל

אם אין שורה קודמת בעמודה מסוימת (מחוץ לתחום), הפונקציה מגדירה את הערך ל-NULL כפי שמוצג בדוגמה הקודמת.

כדי להגדיר ערך ברירת מחדל עבור כל גישה מחוץ לתחום, נוכל לבצע את הפעולות הבאות:

בחר
שם מוצר,
מחיר,
lag(barcode, 1, 'N/A') over (מחיצה לפי קטגוריה
מיין לפי
price asc) בתור פריט_קודם
מ
מוצרים p;

הגדרנו את ערך ברירת המחדל ל-'N/A'. זה אמור להחליף כל ערך מחוץ לתחום כפי שמוצג בפלט:

דוגמה 3: ערך היסט מותאם אישית

נניח שאתה רוצה לגשת לשתי השורות הקודמות מהשורה הנוכחית. נוכל לעשות זאת על ידי הגדרת ערך ההיסט ל-2.

שאילתה לדוגמה מומחשת בהודעה הבאה:

בחר
שם מוצר,
מחיר,
lag(barcode, 2, 'N/A') over (מחיצה לפי קטגוריה
מיין לפי
price asc) בתור פריט_קודם
מ
מוצרים p;

תְפוּקָה:

שאילתה זו מחזירה את שתי השורות הקודמות בכל מחיצה.

סיכום

במדריך זה, למדנו כיצד לעבוד עם הפונקציה lag() כדי לקבל את הפריט הקודם מהשורה הנוכחית.