تأخر SQL

Takhr Sql



تتيح لك وظيفة SQL lag() الوصول إلى الصف السابق من الصف الحالي بإزاحة محددة. باختصار، تتيح لك الدالة lag() الوصول إلى الصف السابق من الصف الحالي. من خلال تحديد قيمة الإزاحة، يمكنك الوصول إلى الصفوف 1، 2، 3 السابقة، وما إلى ذلك، من الصف الحالي.

إنها عكس وظيفة Lead() التي تسمح لك بالوصول إلى الصفوف اللاحقة.







تأخر SQL ()

بناء جملة الوظيفة كما يلي:



LAG(تعبير_القيمة، الإزاحة [، الافتراضي])
زيادة (
[التقسيم حسب Partition_expression]
ORDER BYsort_expression [ASC | DESC]
);

فيما يلي الوسائط المدعومة:



  • value_expression - يحدد القيمة المرجعة للصف السابق. يجب تقييم التعبير إلى قيمة واحدة.
  • عوض - يحدد عدد الصفوف التي يمكن الوصول إليها للخلف من الصف الحالي.
  • تقصير - يقوم بتعيين القيمة الافتراضية إذا كانت الإزاحة خارج نطاق القسم. بشكل افتراضي، يتم تعيين القيمة إلى NULL.
  • التقسيم بواسطة - يحدد كيفية تقسيم البيانات.
  • ترتيب حسب – يقوم بتعيين تنسيق الترتيب للصفوف في كل قسم.

إعداد بيانات العينة

قبل أن نتعمق في طريقة عمل الدالة lag()، فلنبدأ بإعداد جدول أساسي لأغراض العرض التوضيحي.





إنشاء منتجات الجدول (
Product_id INT المفتاح الأساسي AUTO_INCREMENT،
اسم المنتج VARCHAR(255)،
فئة فارتشار (255)،
السعر العشري(10، 2)،
كمية إنت,
تاريخ انتهاء الصلاحية التاريخ،
الباركود الكبير
);

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('قبعة الشيف 25 سم'،
'مخبز'،
24.67,
57,
'2023-09-09'،
2854509564204);

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('بيض السمان - المعلب'،
'مخزن'،
17.99,
67،
'29-09-2023'،
1708039594250);

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('القهوة - بيضة نوغ كابتشينو'،
'مخبز'،
92.53,
10،
'22-09-2023'،
8704051853058)؛

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('الكمثرى - الشائكة'،
'مخبز'،
65.29،
48,
'23-08-2023'،
5174927442238)؛

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('المعكرونة - شعر الملاك'،
'مخزن'،
48.38،
59,
'2023-08-05'،
8008123704782);

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('النبيذ - بروسيكو فالدوبيادين'،
'ينتج'،
44.18،

'2023-03-13'،
6470981735653)؛

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('معجنات - فرنسية صغيرة متنوعة'،
'مخزن'،
36.73،
52,
'29-05-2023'،
5963886298051);

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('برتقالي - معلب، أفندي'،
'ينتج'،
65.0،
1,
'2023-04-20'،
6131761721332)؛

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('لحم الخنزير - الكتف'،
'ينتج'،
55.55،
73،
'2023-05-01'،
9343592107125)؛

إدراج
داخل
المنتجات (اسم_المنتج،
فئة،
سعر،
كمية،
تاريخ انتهاء الصلاحية،
الباركود)
القيم ('دي سي هيكياج هيرا هوبا'،
'ينتج'،
56.29،
53،
'2023-04-14'،
3354910667072);

مع اكتمال عملية إنشاء البيانات وإعدادها، فلننتقل إلى مناقشة بعض الأمثلة.

مثال 1: الاستخدام الأساسي

في هذه الحالة، يمكننا الوصول إلى جدول 'المنتجات' الذي يحتوي على معلومات المنتج. لنفترض أننا نريد الحصول على الرمز الشريطي السابق من الصف الحالي.



يمكننا استخدام الدالة lag() كما يلي:

يختار
اسم المنتج،
سعر،
تأخر (الباركود) على (التقسيم حسب الفئة
ترتيب حسب
السعر تصاعدي) كما هو موضح في العنصر السابق
من
المنتجات ع؛

يقوم الكود المحدد بتقسيم البيانات بناءً على الفئة. ثم يقوم بعد ذلك بجلب الرمز الشريطي السابق في القسم باستخدام وظيفة lag().

الناتج الناتج هو كما يلي:

المثال 2: تحديد القيمة الافتراضية

إذا لم يكن هناك صف سابق في عمود معين (خارج الحد)، تقوم الدالة بتعيين القيمة إلى NULL كما هو موضح في المثال السابق.

لتعيين قيمة افتراضية لأي وصول خارج النطاق، يمكننا القيام بما يلي:

يختار
اسم المنتج،
سعر،
تأخر (الرمز الشريطي، 1، 'N/A') على (التقسيم حسب الفئة
ترتيب حسب
السعر تصاعدي) كما هو موضح في العنصر السابق
من
المنتجات ع؛

قمنا بتعيين القيمة الافتراضية على 'N/A'. يجب أن يحل هذا محل أي قيمة خارجة عن الحد كما هو موضح في الإخراج:

المثال 3: قيمة الإزاحة المخصصة

لنفترض أنك تريد الوصول إلى الصفين السابقين من الصف الحالي. يمكننا القيام بذلك عن طريق ضبط قيمة الإزاحة على 2.

يتم توضيح مثال الاستعلام في ما يلي:

يختار
اسم المنتج،
سعر،
تأخر (الرمز الشريطي، 2، 'N/A') على (التقسيم حسب الفئة
ترتيب حسب
السعر تصاعدي) كما هو موضح في العنصر السابق
من
المنتجات ع؛

انتاج:

يقوم هذا الاستعلام بإرجاع الصفين السابقين في كل قسم.

خاتمة

في هذا البرنامج التعليمي، تعلمنا كيفية العمل مع الدالة lag() للحصول على العنصر السابق من الصف الحالي.