0Pricing
SQL Academy · درس

Lag/Lead مع نوافذ الإطار

اجمع بين LAG/LEAD ونوافذ الإطار لحساب فروق الفترات واكتشاف الفجوات في السلاسل الزمنية

Lag/Lead مع نوافذ الإطار درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

خلاصة LAG/LEAD

تعيد LAG(col, n) قيمة n من الصفوف السابقة للصف الحالي في النافذة. وتنظر LEAD(col, n) إلى الصفوف اللاحقة.

SELECT day, revenue,
       LAG(revenue) OVER (ORDER BY day) AS prev_day_revenue
FROM daily_revenue;

LAG مع قيمة افتراضية

تكون الوسيطة الثالثة قيمة افتراضية عند عدم وجود جار:

LAG(revenue, 1, 0) OVER (ORDER BY day)
-- Returns 0 instead of NULL for the very first row.

حساب الفروقات

التغير من يوم إلى آخر:

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;

LAG متعدد الخطوات

قارن بالقيمة قبل N يومًا، وهو مفيد للمقارنة أسبوعًا بأسبوع وسنة بسنة:

LAG(revenue, 7) OVER (ORDER BY day)   -- 7 days ago
LAG(revenue, 365) OVER (ORDER BY day) -- 1 year ago

استخدام LEAD لخانات التنبؤ

أنماط من نوع "ما الحدث التالي؟":

SELECT id, ts,
       LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) AS next_ts,
       LEAD(ts) OVER (PARTITION BY user_id ORDER BY ts) - ts AS gap_to_next
FROM events;

الأنماط لكل مستخدم

تحترم LAG وLEAD عبارة PARTITION BY:

SELECT user_id, ts, action,
       LAG(action) OVER (PARTITION BY user_id ORDER BY ts) AS prev_action
FROM events;
-- prev_action is the user's previous event, not globally.

اكتشاف تغيّر الحالة

اجمع بين LAG وCASE:

SELECT id, status,
  CASE WHEN status <> LAG(status) OVER (ORDER BY ts) THEN 'changed' ELSE 'same' END
FROM orders;

FIRST_VALUE وLAST_VALUE

القيمة الأولى أو الأخيرة ضمن الإطار:

FIRST_VALUE(status) OVER (PARTITION BY order_id ORDER BY ts) AS first_status
-- The status when the order was first seen.

LAST_VALUE(status) OVER (
  PARTITION BY order_id ORDER BY ts
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS final_status

NTH_VALUE

القيمة رقم N في نافذة مرتبة:

NTH_VALUE(revenue, 3) OVER (
  ORDER BY revenue DESC
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
-- Third-highest revenue value.

دوال الإطار لكل مجموعة

اجمع بين LAG وPARTITION BY للحصول على الصفوف المجاورة ضمن المجموعات:

SELECT user_id, ts, page,
       LAG(page) OVER (PARTITION BY user_id ORDER BY ts) AS prev_page,
       LEAD(page) OVER (PARTITION BY user_id ORDER BY ts) AS next_page
FROM page_views;

الأداء

ترتّب دوال النافذة البيانات مرة واحدة لكل تقسيم. افهرس أعمدة PARTITION BY وORDER BY عندما تكون التقسيمات كبيرة.

خلاصة

تجعل LAG وLEAD المقارنة بين الصفوف المتتالية منخفضة التكلفة.

  • تمنع القيمة الافتراضية ظهور NULL
  • اجمعها مع CASE لاكتشاف تغيّر الحالة
  • تكمل FIRST_VALUE وLAST_VALUE وNTH_VALUE هذه المجموعة من الدوال

تحقق سريع

تريد أن يتضمن كل صف الفاصل الزمني، بالثواني، حتى الحدث التالي للمستخدم. ما الدالة التي تستخدمها؟

الأسئلة الشائعة

هل درس «Lag/Lead مع نوافذ الإطار» مجاني؟

نعم — نص درس «Lag/Lead مع نوافذ الإطار» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «Lag/Lead مع نوافذ الإطار»؟

اجمع بين LAG/LEAD ونوافذ الإطار لحساب فروق الفترات واكتشاف الفجوات في السلاسل الزمنية تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «Lag/Lead مع نوافذ الإطار»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. عبارات الإطار: ROWS مقابل RANGE
  2. Lag/Lead مع نوافذ الإطار
  3. التجميع باستخدام NTILE وCume_Dist
  4. أنماط إعداد التقارير الواقعية
← العودة إلى SQL Academy