LAG وLEAD وأنماط السلاسل الزمنية
قارن كل صف بالصف السابق أو التالي باستخدام LAG وLEAD، وابنِ الفروق بين الفترات.
LAG وLEAD وأنماط السلاسل الزمنية درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
LAG وLEAD: النظر إلى الخلف / الأمام
تصل هذه الدوال إلى الصفوف المجاورة في النافذة:
LAG(col, n, default)— القيمة الموجودة قبل الصف الحالي بـ n صفوفLEAD(col, n, default)— القيمة الموجودة بعده بـ n صفوف
الصف السابق
قارن كل طلب بالطلب السابق للمستخدم نفسه:
SELECT id, user_id, created_at, total,
LAG(total) OVER (
PARTITION BY user_id ORDER BY created_at
) AS prev_total
FROM orders;التغير من يوم إلى يوم
الفرق عن اليوم السابق:
SELECT day, revenue,
revenue - LAG(revenue) OVER (ORDER BY day) AS delta
FROM daily_revenue
ORDER BY day;التغير من سنة إلى سنة
استخدم LAG مع إزاحة مقدارها 12 على سلسلة شهرية:
SELECT month, revenue,
LAG(revenue, 12) OVER (ORDER BY month) AS prev_year_revenue,
revenue / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) - 1 AS yoy
FROM monthly_revenue;اكتشاف الفجوات
العثور على الأيام التي تفتقد إلى بيانات:
WITH d AS (
SELECT day, LAG(day) OVER (ORDER BY day) AS prev_day FROM daily_signups
)
SELECT day, prev_day, day - prev_day AS gap_days
FROM d
WHERE day - prev_day > 1;تقسيم الجلسات
جمّع الصفوف في جلسات عندما تتجاوز الفجوة حدًا معينًا:
WITH gaps AS (
SELECT user_id, ts,
CASE WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
> INTERVAL '30 min'
THEN 1 ELSE 0 END AS new_session
FROM events
)
SELECT user_id, ts,
SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;الأول والأخير في المجموعة
تسترجع FIRST_VALUE وLAST_VALUE حدود النافذة:
SELECT id, total,
FIRST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at) AS first_order,
LAST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order
FROM orders;
-- LAST_VALUE needs the explicit frame, otherwise default frame ends at current row.NTH_VALUE
اختيار القيمة رقم N في التقسيم:
SELECT id,
NTH_VALUE(total, 2) OVER (
PARTITION BY user_id ORDER BY total DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS second_largest
FROM orders;القيمة الافتراضية للسلاسل الزمنية
تكون الوسيطة الثالثة لـ LAG قيمة افتراضية عند عدم وجود صف سابق:
SELECT day, revenue,
revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;
-- delta on first day = revenue itself (vs NULL)المكافئ باستخدام Self-Join
يمكنك كتابة LAG باستخدام self-join، لكنه سيكون أبطأ وأقل أناقة. فضّل دائمًا دوال النوافذ.
الأداء
تجتاز دوال النوافذ التقسيم مرة واحدة. وتتمثل عنق الزجاجة في الفرز — أنشئ فهارس على أعمدة ORDER BY حيثما أمكن.
مراجعة
تتيح LAG وLEAD المقارنة بين الصفوف.
- السابق والتالي داخل التقسيم
- الفروق، والتغير من فترة إلى أخرى، وتقسيم الجلسات
- FIRST_VALUE/LAST_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 منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «LAG وLEAD وأنماط السلاسل الزمنية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- OVER وPARTITION BY وORDER BY
- ROW_NUMBER وRANK وDENSE_RANK
- LAG وLEAD وأنماط السلاسل الزمنية
- المجاميع التراكمية والمتوسطات المتحركة