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.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
CREATE TABLE tbl (
id integer NOT NULL
, version text NOT NULL
);

INSERT INTO tbl VALUES
(10, '10-2')
, (10, '10-1')
, (10, '10') -- missing subversion
, (10, '10-111') -- multi-digit number
, (11, '11-1')
, (11, '11-0') -- proper '0'
, (11, '11-') -- missing subversion but trailing '-'
, (11, '11-2');
INSERT 0 8
SELECT DISTINCT ON (id) *
FROM tbl
ORDER BY id, GREATEST(split_part(version, '-', 2), '0')::int DESC
id version
10 10-111
11 11-2
SELECT 2
SELECT DISTINCT ON (id) *
FROM tbl
ORDER BY id, NULLIF(split_part(version, '-', 2), '')::int DESC NULLS LAST;
id version
10 10-111
11 11-2
SELECT 2
SELECT DISTINCT ON (id) *
FROM tbl
ORDER BY id, CASE WHEN split_part(version, '-', 2)= '' THEN '0' ELSE split_part(version, '-', 2) END::int DESC;
id version
10 10-111
11 11-2
SELECT 2
SELECT DISTINCT ON (id) *
FROM (SELECT *, split_part(version, '-', 2) AS subversion FROM tbl) t
ORDER BY id, CASE WHEN subversion = '' THEN '0' ELSE subversion END::int DESC;
id version subversion
10 10-111 111
11 11-2 2
SELECT 2