Вот вариант ответа ЛЕВОГО СОЕДИНЕНИЯ ответа Энтони (удаляет последовательные идентификаторы из результатов)
SELECT a.*
FROM mytable a
LEFT JOIN mytable b ON a.Name = b.Name AND a.SectionID = b.SectionID + 1
WHERE b.SectionID IS NULL
РЕДАКТИРОВАТЬ: Поскольку существует другая интерпретация вопроса (просто получение результатов, где идентификаторы находятся на расстоянии более 1 числа), вот еще одна попытка ответа:
WITH alternate AS (
SELECT sectionid,
name,
EXISTS(SELECT a.sectionid
FROM mytable b
WHERE a.name = b.name AND
(a.sectionid = b.sectionid-1 or a.sectionid = b.sectionid+1)) as has_neighbour,
row_number() OVER (PARTITION by a.name ORDER BY a.name, a.sectionid) as row_no
FROM mytable a
)
SELECT sectionid, name
FROM alternate
WHERE row_no % 2 = 1 OR NOT(has_neighbour)
ORDER BY name, sectionid;
дает:
sectionid | name
-----------+------
1 | Dan
4 | Dan
2 | Tom
7 | Tom
9 | Tom
Логика: если запись имеет соседей с одинаковым именем и идентификатором +/- 1, то берется каждая нечетная строка, если у нее нет таких соседей, то она получает строку независимо от того, является ли она четной или нечетной.
Как указано в комментарии, условие является неоднозначным - при запуске каждой новой последовательности вы можете начинать с нечетных или четных строк, и критерии все равно будут удовлетворены с разными результатами (даже с разным количеством результатов).