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() ফাংশনগুলো ব্যবহার করুন।