AS (SELECT ROW_NUMBER() OVER(ORDER BY a) AS row_index, a, b, c FROM public.test)
SELECT
d1.a,
d1.b,
d1.c
FROM
test_data d1
JOIN
test_data d2
ON
(d1.row_index = d2.row_index + 1) AND (d1.a <> d2.a)
это просто набросок, который не выполняет поставленной задачи.
стОит ли пробовать его додумывать и реально ли добиться решения на этой основе в принципе. если реально, то насколько это будет быстрее /медленнее предложенного вами варианта?
IMHO, пробовать не стоит — без стабильного принципа упорядочивания записей все подобные запросы ненадёжны (т.е. могут время от времени выдавать неправильный результат (это про Ваш ROW_NUMBER)). Далее, зачем тут JOIN и т.п.? Вроде же достаточно одного сканирования таблицы (ну или одного сканирования индекса)?
Обсуждают сегодня