https://www.youtube.com/watch?v=WBqTj-FYux8&list=PLavw5C92dz9Hxz0YhttDniNgKejQlPoAn&index=14
DROP TABLE IF EXISTS invoice;
CREATE TABLE invoice (
serial_no INT,
invoice_date DATE
);
INSERT INTO invoice (serial_no, invoice_date) VALUES (330115, STR_TO_DATE('01-Mar-2024', '%d-%b-%Y'));
INSERT INTO invoice (serial_no, invoice_date) VALUES (330120, STR_TO_DATE('01-Mar-2024', '%d-%b-%Y'));
INSERT INTO invoice (serial_no, invoice_date) VALUES (330121, STR_TO_DATE('01-Mar-2024', '%d-%b-%Y'));
INSERT INTO invoice (serial_no, invoice_date) VALUES (330122, STR_TO_DATE('02-Mar-2024', '%d-%b-%Y'));
INSERT INTO invoice (serial_no, invoice_date) VALUES (330125, STR_TO_DATE('02-Mar-2024', '%d-%b-%Y'));
SELECT * FROM invoice;
WITH RECURSIVE
WHERE NOT EXISTS
WITH RECURSIVE cte AS
(
SELECT MIN(serial_no) AS n FROM invoice
UNION
SELECT (n+1) AS n
FROM cte
WHERE n < (SELECT MAX(serial_no) FROM invoice)
)
SELECT n AS MISSING_SERIAL_NO FROM cte
WHERE NOT EXISTS (SELECT serial_no FROM invoice WHERE serial_no = CTE.n)