ماڈیول اسباق (4/4)
شفٹیں: وقفہ اور لیڈ
شفٹیں: وقفہ اور لیڈ
ترتیب وار اور وقت پر مبنی ڈیٹا میں، آپ کو اکثر موجودہ قطار کا پچھلے دن کی قطار سے موازنہ کرنے کی ضرورت ہوتی ہے۔ "معیاری" ایس کیو ایل میں، ایسا کرنے کے لیے بہت خطرناک (اور بہت سست) سیلف جوائن کی ضرورت ہوتی ہے۔
LAG() (پچھلی قطار) اور LEAD() (اگلی قطار) فنکشن بالکل اس مسئلے کو انتہائی چستی اور خوبصورتی کے ساتھ حل کرتے ہیں۔
ماضی اور مستقبل کی طرف دیکھنا
SELECT
created_at,
total_amount,
LAG(total_amount) OVER(ORDER BY created_at) AS importo_ordine_precedente
FROM orders;مثال کے طور پر، ہر قطار آسانی سے ایک ہی ٹیبل کے ذریعہ تیار کردہ رقم لے جائے گی، جو ایک قطار (وقت کے ساتھ پیچھے کی طرف) آگے منتقل ہوگی۔ ہم فرق یا ماہ بہ ماہ فیصد تبدیلیوں کا حساب لگانے کے لیے آسانی سے total_amount - LAG(...) کو گھٹا سکتے ہیں!
اسی طرح، LEAD() موجودہ والی کے بالکل نیچے قطار سے قدر کھینچ لے گا۔
'پروڈکٹس' ٹیبل سے، 'id'، 'launched_on'، 'price' نکالیں اور 'prev_price' شامل کریں، یعنی پروڈکٹ کی 'قیمت' کو منطقی طور پر 'پچھلی' مانی جاتی ہے، چڑھتے ہوئے 'لانچڈ_آن' آرڈر میں۔
اشارہ دکھائیں۔
LAG (قیمت) اوور (ASC پر لانچ_پر آرڈر کے ذریعے) استعمال کریں
3 کوششوں کے بعد حل دستیاب ہے۔
آپ فی انفرادی صارف کی درجہ بندی کے چھلانگوں کا حساب کیسے لگائیں گے؟ اس کی تقلید کریں: 'جائزہ' ٹیبل سے 'کسٹمر_آئی ڈی'، 'created_at'، 'درجہ بندی' اور 'اگلی_درجہ بندی' (وقت کے ساتھ ساتھ اسی گاہک کا اگلا جائزہ) سے نکالیں۔ لہذا 'customer_id' کے ذریعہ تقسیم کریں، 'created_at' کے ذریعہ آرڈر کریں اور آگے جھانکنے کے لئے صحیح ونڈو فنکشن کا استعمال کریں۔
اشارہ دکھائیں۔
LEAD() ایک ساتھ پارٹیشن BY اور OOR میں ORDER BY کے ساتھ۔
3 کوششوں کے بعد حل دستیاب ہے۔