Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
Obtener la identificación gratuita máxima disponible en postgresql para int8

Tengo una tabla con pocas ID, digamos 100000, 99999, 99998, 1000, 10, 5. Ahora mi requisito es obtener la ID máxima que no se usa.

Data de muestra:

 CREATE TABLE foo AS SELECT * FROM ( VALUES (10000),(9999),(9998),(100),(5),(2) ) AS t(id);

En el caso anterior, debería ser 99997. ¿Alguna consulta para obtener este ID máximo disponible?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

He usado la función lead () para obtener la diferencia entre la identificación actual y la siguiente identificación en orden descendente.

 with ct as ( select id, lead(id) over (order by id desc) as nextid from foo ) select id -1 as next_id from ct where id - nextid > 1 order by id desc limit 1; next_id ------- 9997 drop table foo;

Rextester aquí

over 4 years ago · Santiago Trujillo Relatório

0

Un método usa left join :

 select t.id - 1 from t left join t tprev on t.id = tprev.id + 1 where tprev.id is null order by t.id desc limit 1;

Otro usa lag() :

 select t.id - 1 from (select t.*, lag(id) over (order by id) as prev_id from t ) t where prev_id <> id - 1 order by id desc limit 1;
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda