شرح صفوف ومحتوى الفقرة
لمقارنة قيمة الصف الحالي بقيمة الصف السابق أو الصف التالي زمنياً (مثل حساب نمو الإيرادات الشهري أو الفارق الزمني بين طلبين متتاليين لنفس العميل)، يوفر 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;