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

MySQL টেবিলে ন্যূনতম অনব্যবহৃত মান (Gap) খুঁজে বের করা

সিকোয়েন্স নম্বরের কালামে যে মানটি অনুপস্থিত (missing) সেটি খুঁজে বের করতে LEFT JOIN সেলফ-জয়েন পদ্ধতি ব্যবহার করা হয়।

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

CREATE TABLE find_value (
    sequence_number INT
);

INSERT INTO find_value VALUES (109), (110), (111), (113), (114);

নোট: ১১২ অনুপস্থিত।

LEFT JOIN ক্যোয়ারি

SELECT tbl1.sequence_number + 1 AS missing_value
FROM find_value AS tbl1
LEFT JOIN find_value AS tbl2 
    ON tbl1.sequence_number + 1 = tbl2.sequence_number
WHERE tbl2.sequence_number IS NULL
ORDER BY tbl1.sequence_number
LIMIT 1;

ফলাফল

+----------------+
| missing_value  |
+----------------+
| 112            |
+----------------+

কিভাবে কাজ করে

  1. tbl1 — মূল টেবিল
  2. tbl2 — একই টেবিল, কিন্তু প্রতিটি সিকোয়েন্সের পরবর্তী মান (+1) দিয়ে জয়েন
  3. যদি tbl2.sequence_number IS NULL হয়, অর্থাৎ পরবর্তী মান টেবিলে নেই
  4. ORDER BY ... LIMIT 1 — সবচেয়ে ছোট অনুপস্থিত মান দেয়

আধুনিক পদ্ধতি (MySQL 8.0+ / MariaDB 10.2+): CTE + WINDOW FUNCTION

WITH numbered AS (
    SELECT sequence_number,
           LAG(sequence_number) OVER (ORDER BY sequence_number) AS prev_val
    FROM find_value
)
SELECT prev_val + 1 AS missing_value
FROM numbered
WHERE sequence_number - prev_val > 1
ORDER BY prev_val
LIMIT 1;

প্রথম মissing মান (সিকোয়েন্স ১ থেকে শুরু হলে)

SELECT MIN(t1.sequence_number) + 1 AS first_missing
FROM find_value t1
LEFT JOIN find_value t2 ON t1.sequence_number + 1 = t2.sequence_number
WHERE t2.sequence_number IS NULL;

সব মissing মান পেতে

SELECT t1.sequence_number + 1 AS missing_start,
       (SELECT MIN(t3.sequence_number) - 1 
        FROM find_value t3 
        WHERE t3.sequence_number > t1.sequence_number) AS missing_end
FROM find_value t1
LEFT JOIN find_value t2 ON t1.sequence_number + 1 = t2.sequence_number
WHERE t2.sequence_number IS NULL;
  1. MySQL에서 N번째로 큰 값 찾기 (LIMIT 오프셋 활용)

  2. MySQL-এ SUBSTRING_INDEX এবং CAST দিয়ে ফ্লোট ভ্যালু দুটি কলামে ভাগ করা

  3. MySQL-এ VARCHAR কলাম থেকে সর্বোচ্চ সংখ্যাগত মান বের করা

  4. MySQL-এ কলামের সর্বোচ্চ মান বের করা (Find Maximum Value in a Column)