Как в postgresql получить следующую строку таблицы с составным первичным ключом по первичному ключу предыдущей записи?

Как в postgresql получить следующую строку таблицы с составным первичным ключом по первичному ключу предыдущей записи? Составной ключ может быть любой, не только из интов.


create table testobject6(
    pk1 int8,
    pk2 int8,
    pk3 int8,
    pk4 int8,
    pk5 int8,
    PRIMARY KEY(pk1, pk2, pk3, pk4, pk5)
);

insert into testobject6 
    (pk1, pk2, pk3, pk4, pk5) 
values 
    (1,2,3,4,5),
    (3,1,4,0,7),
    (2,9,5,5,6),
    (1,8,8,5,7),
    (1,9,0,0,8);

select * 
  from testobject6
 order by pk1, pk2, pk3, pk4, pk5;

select * 
  from testobject6
 where ... ??? -- допустим следующую за (2,9,5,5,6)
 order by pk1, pk2, pk3, pk4, pk5
 limit 1;

Ответы (2 шт):

Автор решения: Alexander Pavlov
 select * ,
  lead(pk1) over next_row as next_pk1,
  lead(pk2) over next_row as next_pk2,
  lead(pk3) over next_row as next_pk3,
  lead(pk4) over next_row as next_pk4,
  lead(pk5) over next_row as next_pk5
 from testobject6
 window next_row as (order by pk1, pk2, pk3, pk4, pk5 rows between current row and 1 following)
 order by pk1, pk2, pk3, pk4, pk5;
→ Ссылка
Автор решения: Андрей
SELECT * 
FROM testobject6
WHERE (pk1, pk2, pk3, pk4, pk5) > (2,9,5,5,6)
ORDER BY pk1, pk2, pk3, pk4, pk5
LIMIT 1;
→ Ссылка