মডিউল পাঠ (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() সারি থেকে মানটিকে বর্তমানের ঠিক নীচে টেনে আনবে।
'পণ্য' টেবিল থেকে, 'আইডি', 'লঞ্চ করা_অন', 'মূল্য' বের করুন এবং 'আগের_মূল্য' যোগ করুন, অর্থাৎ পণ্যের 'মূল্য' যুক্তিযুক্তভাবে 'আগের' হিসেবে বিবেচিত হয়, ঊর্ধ্বমুখী 'লঞ্চ করা_অন' ক্রমে।
ইঙ্গিত দেখান
ল্যাগ (মূল্য) ওভার ব্যবহার করুন (অর্ডার বাই লঞ্চ_অন ASC)
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
আপনি কিভাবে প্রতিটি ব্যবহারকারীর প্রতি রেটিং লাফ গণনা করবেন? এটি অনুকরণ করুন: 'রিভিউ' টেবিল থেকে 'customer_id', 'created_at', 'রেটিং' এবং 'next_rating' (সময়ের সাথে একই গ্রাহকের পরবর্তী পর্যালোচনা)। সুতরাং 'customer_id' দ্বারা বিভাজন করুন, 'created_at' দ্বারা অর্ডার করুন এবং সামনে উঁকি দেওয়ার জন্য সঠিক উইন্ডো ফাংশন ব্যবহার করুন।
ইঙ্গিত দেখান
লিড() একসাথে পার্টিশন বাই এবং ওভারে অর্ডার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ