এসকিউএল ল্যাগ

Esaki U Ela Lyaga



SQL lag() ফাংশন আপনাকে একটি নির্দিষ্ট অফসেটে বর্তমান সারি থেকে পূর্ববর্তী সারি অ্যাক্সেস করতে দেয়। সংক্ষেপে, lag() ফাংশন আপনাকে বর্তমান থেকে আগের সারিটি অ্যাক্সেস করতে দেয়। অফসেট মান নির্দিষ্ট করে, আপনি বর্তমান থেকে আগের 1, 2, 3, ইত্যাদি সারিগুলি অ্যাক্সেস করতে পারেন।

এটি লিড() ফাংশনের বিপরীত যা আপনাকে পরবর্তী সারিগুলি অ্যাক্সেস করতে দেয়।







এসকিউএল ল্যাগ()

ফাংশন সিনট্যাক্স নিম্নরূপ:



LAG(value_expression, offset [, default])
ওভার (
[পার্টিশন_এক্সপ্রেশন দ্বারা বিভাজন]
সাজান_অভিব্যক্তি অনুসারে অর্ডার করুন [ASC | DESC]
);

নিম্নলিখিত সমর্থিত আর্গুমেন্ট:



  • মান_প্রকাশ - এটি পূর্ববর্তী সারির রিটার্ন মান নির্দিষ্ট করে। অভিব্যক্তি একটি একক মান মূল্যায়ন করা আবশ্যক.
  • অফসেট - এটি সুনির্দিষ্ট করে যে বর্তমান সারি থেকে কতগুলি সারি অ্যাক্সেস করতে হবে।
  • ডিফল্ট - অফসেট পার্টিশনের সুযোগের বাইরে থাকলে এটি ডিফল্ট মান সেট করে। ডিফল্টরূপে, মানটি NULL এ সেট করা থাকে।
  • দ্বারা বিভাজন - এটি কীভাবে ডেটা পার্টিশন করতে হয় তা নির্দিষ্ট করে।
  • দ্বারা অর্ডার করুন - এটি প্রতিটি পার্টিশনের সারিগুলির জন্য অর্ডার বিন্যাস সেট করে।

নমুনা ডেটা সেটআপ

ল্যাগ() ফাংশনের কাজের মধ্যে ডুব দেওয়ার আগে, আসুন প্রদর্শনের উদ্দেশ্যে একটি মৌলিক টেবিল সেট আপ করে শুরু করি।





টেবিল পণ্য তৈরি করুন (
পণ্য_আইডি আইএনটি প্রাথমিক কী স্বয়ংক্রিয়_INCREMENT,
পণ্য_নাম VARCHAR(255),
শ্রেণী VARCHAR(255),
মূল্য দশমিক (10, 2),
পরিমাণ INT,
মেয়াদ শেষ হওয়ার_তারিখ DATE,
বারকোড BIGINT
);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('শেফ হ্যাট 25 সেমি',
'বেকারি',
24.67,
57,
'2023-09-09',
2854509564204);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('কোয়েলের ডিম - টিনজাত',
'প্যান্ট্রি',
17.99,
৬৭,
'2023-09-29',
1708039594250);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('কফি - ডিম নগ ক্যাপুচিনো',
'বেকারি',
92.53,
10,
'2023-09-22',
8704051853058);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('নাশপাতি - কাঁটাযুক্ত',
'বেকারি',
65.29,
48,
'2023-08-23',
5174927442238);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('পাস্তা - অ্যাঞ্জেল হেয়ার',
'প্যান্ট্রি',
48.38,
59,
'2023-08-05',
8008123704782);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('ওয়াইন - প্রসেকো ভালডোবিয়াডেনে',
'উৎপাদন করা',
44.18,
৩,
'2023-03-13',
6470981735653);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('পেস্ট্রি - ফ্রেঞ্চ মিনি অ্যাসোর্টেড',
'প্যান্ট্রি',
36.73,
52,
'2023-05-29',
5963886298051);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('কমলা - টিনজাত, ম্যান্ডারিন',
'উৎপাদন করা',
65.0,
1,
'2023-04-20',
6131761721332);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('শুয়োরের মাংস - কাঁধ',
'উৎপাদন করা',
55.55,
73,
'2023-05-01',
9343592107125);

সন্নিবেশ
মধ্যে
পণ্য (পণ্য_নাম,
বিভাগ,
মূল্য,
পরিমাণ,
মেয়াদ শেষ হওয়ার_তারিখ,
বারকোড)
মান ('ডিসি হিকিয়েজ হিরা হুবা',
'উৎপাদন করা',
56.29,
53,
'2023-04-14',
3354910667072);

ডেটা তৈরি এবং সেটআপ সম্পূর্ণ হওয়ার সাথে সাথে, আসুন কয়েকটি উদাহরণ নিয়ে আলোচনা করা যাক।

উদাহরণ 1: মৌলিক ব্যবহার

এই ক্ষেত্রে, আমাদের কাছে পণ্যের তথ্য রয়েছে এমন একটি 'পণ্য' টেবিলে অ্যাক্সেস আছে। ধরুন আমরা বর্তমান সারি থেকে আগের বারকোড পেতে চাই।



আমরা lag() ফাংশনটি নিম্নরূপ ব্যবহার করতে পারি:

নির্বাচন করুন
পণ্যের নাম,
মূল্য,
ল্যাগ(বারকোড) ওভার (বিভাগ দ্বারা বিভাজন
দ্বারা আদেশ
মূল্য asc) আগের_আইটেম হিসাবে
থেকে
পণ্য পি;

প্রদত্ত কোডটি বিভাগের উপর ভিত্তি করে ডেটা ভাগ করে। এটি lag() ফাংশন ব্যবহার করে পার্টিশনে আগের বারকোড নিয়ে আসে।

ফলস্বরূপ আউটপুট নিম্নরূপ:

উদাহরণ 2: ডিফল্ট মান সেট করা

একটি নির্দিষ্ট কলামে (সীমার বাইরে) কোনো পূর্ববর্তী সারি না থাকলে, ফাংশনটি আগের উদাহরণে দেখানো হিসাবে NULL মান সেট করে।

সুযোগের বাইরের যেকোন অ্যাক্সেসের জন্য একটি ডিফল্ট মান সেট করতে, আমরা নিম্নলিখিতগুলি করতে পারি:

নির্বাচন করুন
পণ্যের নাম,
মূল্য,
ল্যাগ(বারকোড, 1, 'N/A') ওভার (বিভাগ দ্বারা বিভাজন
দ্বারা আদেশ
মূল্য asc) আগের_আইটেম হিসাবে
থেকে
পণ্য পি;

আমরা ডিফল্ট মান 'N/A' এ সেট করেছি। এটি আউটপুটে দেখানো যেকোন-অফ-বাউন্ড মান প্রতিস্থাপন করা উচিত:

উদাহরণ 3: কাস্টম অফসেট মান

ধরুন আপনি বর্তমান সারি থেকে আগের দুটি সারি অ্যাক্সেস করতে চান। আমরা অফসেট মান 2 সেট করে এটি করতে পারি।

একটি উদাহরণ ক্যোয়ারী নিম্নলিখিত চিত্রিত করা হয়:

নির্বাচন করুন
পণ্যের নাম,
মূল্য,
ল্যাগ(বারকোড, 2, 'N/A') ওভার (বিভাগ দ্বারা বিভাজন
দ্বারা আদেশ
মূল্য asc) আগের_আইটেম হিসাবে
থেকে
পণ্য পি;

আউটপুট:

এই প্রশ্নটি প্রতিটি পার্টিশনে পূর্ববর্তী দুটি সারি প্রদান করে।

উপসংহার

এই টিউটোরিয়ালে, আমরা বর্তমান সারি থেকে আগের আইটেমটি পেতে lag() ফাংশনের সাথে কীভাবে কাজ করতে হয় তা শিখেছি।