কম্পিউটার টিউটোরিয়াল

MySQL-এ LAG ফাংশন অনুকরণ করুন (MySQL 8.0 এর আগের ভার্সনে)

MySQL 8.0-এর আগে LAG() উইন্ডো ফাংশন নেই। তবে ইউজার-ডিফাইনড ভেরিয়েবল ও সেলফ-জয়েন দিয়ে এটি অনুকরণ করা যায়।

টেবিল ও ডেটা তৈরি

CREATE TABLE LagDemo (
    UserId INT,
    UserValue INT
);

INSERT INTO LagDemo VALUES 
(12, 158), (18, 756), (15, 346), (87, 646),
(27, 334), (90, 968), (84, 378), (85, 546);

LAG অনুকরণ কোয়েরি

SET @f := 0;
SET @s := 2;

SELECT l1.UserId, l1.UserValue, 
       l1.UserValue / l2.UserValue AS `LAG`
FROM (
    SELECT IF(@f, @f := @f + 1, @f := 1) AS RowNumber, UserId, UserValue
    FROM LagDemo
) AS l1
LEFT JOIN (
    SELECT IF(@s, @s := @s + 1, @s := 1) AS RowNumber, UserId, UserValue
    FROM LagDemo
) AS l2
ON l1.RowNumber = l2.RowNumber;

আউটপুট

+--------+-----------+--------+
| UserId | UserValue | LAG    |
+--------+-----------+--------+
| 12     | 158       | NULL   |
| 18     | 756       | NULL   |
| 15     | 346       | 2.1899 |
| 87     | 646       | 0.8545 |
| 27     | 334       | 0.9653 |
| 90     | 968       | 1.4985 |
| 84     | 378       | 1.1317 |
| 85     | 546       | 0.5640 |
+--------+-----------+--------+

MySQL 8.0+ এ সহজ পদ্ধতি

SELECT UserId, UserValue,
       LAG(UserValue) OVER (ORDER BY UserId) AS PrevValue,
       UserValue / LAG(UserValue) OVER (ORDER BY UserId) AS Ratio
FROM LagDemo;

সুপারিশ: MySQL 8.0 বা নতুন ভার্সন ব্যবহার করলে নেটিভ LAG(), LEAD() ফাংশনগুলো ব্যবহার করুন।

  1. MySQL-এ একাধিক কলাম অনুযায়ী সার্ট করা

  2. MySQL-এ টেম্পোরারি টেবিলের কলাম লিস্ট দেখানো (SHOW COLUMNS)

  3. MySQL-এ দুটি কলামের জোড়া (pair) কে UNIQUE করতে ALTER TABLE ব্যবহার

  4. MySQL-এ একাধিক কলামে সার্চ করার পদ্ধতি