مرکزی مواد پر جائیں
ماڈیول 13 · سبق 4 از 4کورس میں 52/57~12 min
ماڈیول اسباق (4/4)

شفٹیں: وقفہ اور لیڈ

شفٹیں: وقفہ اور لیڈ

ترتیب وار اور وقت پر مبنی ڈیٹا میں، آپ کو اکثر موجودہ قطار کا پچھلے دن کی قطار سے موازنہ کرنے کی ضرورت ہوتی ہے۔ "معیاری" ایس کیو ایل میں، ایسا کرنے کے لیے بہت خطرناک (اور بہت سست) سیلف جوائن کی ضرورت ہوتی ہے۔

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' شامل کریں، یعنی پروڈکٹ کی 'قیمت' کو منطقی طور پر 'پچھلی' مانی جاتی ہے، چڑھتے ہوئے 'لانچڈ_آن' آرڈر میں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

LAG (قیمت) اوور (ASC پر لانچ_پر آرڈر کے ذریعے) استعمال کریں

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش#sql.m13.l4.e2
کوششیں: 0لوڈ ہو رہا ہے…

آپ فی انفرادی صارف کی درجہ بندی کے چھلانگوں کا حساب کیسے لگائیں گے؟ اس کی تقلید کریں: 'جائزہ' ٹیبل سے 'کسٹمر_آئی ڈی'، 'created_at'، 'درجہ بندی' اور 'اگلی_درجہ بندی' (وقت کے ساتھ ساتھ اسی گاہک کا اگلا جائزہ) سے نکالیں۔ لہذا 'customer_id' کے ذریعہ تقسیم کریں، 'created_at' کے ذریعہ آرڈر کریں اور آگے جھانکنے کے لئے صحیح ونڈو فنکشن کا استعمال کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

LEAD() ایک ساتھ پارٹیشن BY اور OOR میں ORDER BY کے ساتھ۔

3 کوششوں کے بعد حل دستیاب ہے۔