মূল কন্টেন্টে যান
মডিউল 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লোড হচ্ছে...

'পণ্য' টেবিল থেকে, 'আইডি', 'লঞ্চ করা_অন', 'মূল্য' বের করুন এবং 'আগের_মূল্য' যোগ করুন, অর্থাৎ পণ্যের 'মূল্য' যুক্তিযুক্তভাবে 'আগের' হিসেবে বিবেচিত হয়, ঊর্ধ্বমুখী 'লঞ্চ করা_অন' ক্রমে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

ল্যাগ (মূল্য) ওভার ব্যবহার করুন (অর্ডার বাই লঞ্চ_অন ASC)

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম#sql.m13.l4.e2
প্রচেষ্টা: 0লোড হচ্ছে...

আপনি কিভাবে প্রতিটি ব্যবহারকারীর প্রতি রেটিং লাফ গণনা করবেন? এটি অনুকরণ করুন: 'রিভিউ' টেবিল থেকে 'customer_id', 'created_at', 'রেটিং' এবং 'next_rating' (সময়ের সাথে একই গ্রাহকের পরবর্তী পর্যালোচনা)। সুতরাং 'customer_id' দ্বারা বিভাজন করুন, 'created_at' দ্বারা অর্ডার করুন এবং সামনে উঁকি দেওয়ার জন্য সঠিক উইন্ডো ফাংশন ব্যবহার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

লিড() একসাথে পার্টিশন বাই এবং ওভারে অর্ডার করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ