add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE test_data ( id, value ) AS
SELECT 1, 'agaga' FROM DUAL UNION ALL
SELECT 2, 'aaggcct' FROM DUAL UNION ALL
SELECT 3, 'aaggcctt' FROM DUAL UNION ALL
SELECT 4, 'aaagggcccttt' FROM DUAL;
4 rows affected
WITH substrings ( id, value, length, pos ) AS (
SELECT id,
value,
LENGTH( value ),
1
FROM test_data
UNION ALL
SELECT id,
value,
CASE pos
WHEN 1
THEN length - 1
ELSE length
END,
CASE pos
WHEN 1
THEN LENGTH(value) - (length-2)
ELSE pos-1
END
FROM substrings
WHERE length > 1
OR pos > 1
),
non_repeats ( id, value, substring ) AS (
SELECT id,
MIN( value ),
SUBSTR( value, pos, length )
FROM substrings s
GROUP BY id, SUBSTR( value, pos, length )
HAVING COUNT(*) = 1
)
SELECT id,
value,
substring
FROM (
SELECT id,
ID VALUE SUBSTRING
1 agaga gag
2 aaggcct t
3 aaggcctt gc
3 aaggcctt cc
3 aaggcctt ct
3 aaggcctt ag
3 aaggcctt aa
3 aaggcctt tt
3 aaggcctt gg
4 aaagggcccttt ct
4 aaagggcccttt gc
4 aaagggcccttt ag