الانتقال إلى المحتوى الرئيسي
الوحدة 13 · الدرس 4 من 452/57 في الدورة~12 min
دروس الوحدة (4/4)

التحولات: التأخر والرصاص

التحولات: التأخر والرصاص

في البيانات التسلسلية والمستندة إلى الوقت، غالبًا ما تحتاج إلى مقارنة الصف الحالي بالصف من اليوم السابق. في لغة SQL "القياسية"، يتطلب القيام بذلك عمليات انضمام ذاتية خطيرة جدًا (وبطيئة جدًا).

تعمل الدالتان LAG() (الصف السابق) وLEAD() (الصف التالي) على حل هذه المشكلة تمامًا بأقصى قدر من السرعة والأناقة.

التطلع إلى الماضي والمستقبل

SQL
SELECT
  created_at,
  total_amount,
  LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;

في المثال، سيحمل كل صف بشكل ملائم الكمية التي ينتجها نفس الجدول، مع إزاحتها للأمام بمقدار صف واحد (للخلف في الوقت المناسب). يمكننا بسهولة طرح total_amount - LAG(...) لحساب الفرق أو النسبة المئوية للتغيرات الشهرية!

وبالمثل، فإن LEAD() سوف يسحب القيمة من الصف الموجود أسفل الصف الحالي مباشرة.

تمرين#sql.m13.l4.e1
المحاولات: 0جارٍ التحميل…

من جدول "المنتجات"، استخرج "id" و"launched_on" و"price" وأضف "prev_price"، أي "سعر" المنتج الذي يعتبر منطقيًا السعر "السابق"، بترتيب تصاعدي "launched_on".

جارٍ تحميل المحرر…
إظهار التلميح

استخدم LAG(price) OVER(ORDER BY Launch_on ASC)

الحل متاح بعد 3 من المحاولات

تمرين#sql.m13.l4.e2
المحاولات: 0جارٍ التحميل…

كيف يمكنك حساب قفزات التصنيف لكل مستخدم فردي؟ قم بمحاكاتها: من جدول "المراجعات"، استخرج "customer_id" و"created_at" و" rating " و"next_rated" (المراجعة التالية لنفس العميل مع مرور الوقت). لذا، قم بالتقسيم حسب "customer_id"، والترتيب حسب "created_at"، واستخدم وظيفة النافذة اليمنى لإلقاء نظرة خاطفة على الأمام.

جارٍ تحميل المحرر…
إظهار التلميح

LEAD() مع PARTITION BY وORDER BY في OVER.

الحل متاح بعد 3 من المحاولات