انتقل إلى محتوى الدرس

Comparing Adjacent Rows LAG LEAD مقارنة الصف السابق والتالي

تعلّم دوال النوافذ التحليلية OVER و PARTITION BY والترتيب في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

لمقارنة قيمة الصف الحالي بقيمة الصف السابق أو الصف التالي زمنياً (مثل حساب نمو الإيرادات الشهري أو الفارق الزمني بين طلبين متتاليين لنفس العميل)، يوفر MySQL 8 دالتي الإزاحة الموضعية LAG وLEAD:

  • دالة LAG(expr, offset, default_val): تقرأ قيمة العمود من الصف السابق بمقدار خطوات offset (الافتراضي 1)، وتُرجع القيمة البديلة default_val عند أول صف في القسم بدلاً من NULL.
  • دالة LEAD(expr, offset, default_val): تقرأ قيمة العمود من الصف التالي داخل الترتيب المحدد للنافذة.
SQL
-- Compare each month revenue with previous and next month
SELECT
  report_month, revenue,
  LAG(revenue, 1, 0.00) OVER (
    ORDER BY report_month
  ) AS prev_month_rev,
  LEAD(revenue, 1, 0.00) OVER (
    ORDER BY report_month
  ) AS next_month_rev
FROM monthly_sales;