By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
-- Initialisieren der Daten
CREATE TABLE id_table (id INT);
INSERT INTO id_table (id) VALUES (100), (101), (102), (103), (110), (120), (121), (200), (201), (202), (203), (400), (500);
Records: 13 Duplicates: 0 Warnings: 0
SELECT GROUP_CONCAT(
CONCAT( IF(l=h, l, CONCAT(l,"..",h)))
) GAP
FROM (
SELECT MIN(t1.id) l,MAX(t1.id) h, MAX(IF(t2.id IS NULL,@grp:=@grp+1,@grp)) AS grp
FROM id_table t1
LEFT JOIN id_table t2 ON t2.id = t1.id +1
CROSS JOIN ( SELECT @grp := 0 ) AS INIT
GROUP BY @grp
) as r
GAP |
---|
100..103,110,120..121,200..203,400,500 |