MySQL 8.0 से पहले LAG फंक्शन उपलब्ध नहीं था, लेकिन उपयोगकर्ता-परिभाषित वेरिएबल और सेल्फ-जॉइन का उपयोग करके इसे लागू किया जा सकता है।
एक टेबल बनाते हैं:
CREATE TABLE LagDemo (
UserId INT,
UserValue INT
);
रिकॉर्ड डालें:
INSERT INTO LagDemo VALUES (12, 158); INSERT INTO LagDemo VALUES (18, 756); INSERT INTO LagDemo VALUES (15, 346); INSERT INTO LagDemo VALUES (87, 646); INSERT INTO LagDemo VALUES (27, 334); INSERT INTO LagDemo VALUES (90, 968); INSERT INTO LagDemo VALUES (84, 378); INSERT INTO LagDemo VALUES (85, 546);
सभी रिकॉर्ड देखें:
SELECT * FROM LagDemo;
आउटपुट
+--------+-----------+ | UserId | UserValue | +--------+-----------+ | 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+ में आप सीधे LAG() विंडो फंक्शन का उपयोग कर सकते हैं जो बहुत सरल है:
SELECT UserId, UserValue,
UserValue / LAG(UserValue) OVER (ORDER BY UserId) AS LAG_Ratio
FROM LagDemo;