Clipper On Line • Ver Tópico - Quebra de sequencia
Mudar para estilo Clássico
Discussão sobre SQL
Postar uma resposta

Quebra de sequencia

07 Mar 2017 17:24

Ola a todos,

Tenho uma tabela com numeros sequenciais e preciso saber se houve quebra nessa sequencia e quais numeros estao faltando, tipo:

Código:
1
2
3
5
6
7


Que Query poderia mim retonar informando que o numero 4 esta faltando na sequencia?

Quebra de sequencia

07 Mar 2017 18:08

Veja se te ajuda

Código:
select a.id -1 from tabela a.id <> 1 and not exists (select id from tabela b where b.id = (a.id-1) )

Quebra de sequencia

07 Mar 2017 19:07

Cara, esses comandos sao tao loucos (pra mim) q nao estou nem sabendo montar aqui com os meus dados kkkkk

Vou passar os dados pra ver se consegue montar a query pra mim.

Tabela : a03ped
campo : numccf

preciso saber se ha quebra de sequencia nesse campo (numccf)

Quebra de sequencia

07 Mar 2017 19:27

Olá!

O artigo How to find missing values in a sequence with SQL é bem interessante, apesar de ser antigo.

(No exemplo do Fladimir falta a cláusula WHERE)

How to find missing values insequence with SQL

Quebra de sequencia

07 Mar 2017 20:01

Exato Alexandre

Copiei e colei e passou desapercebido,

Agora pegando a necessidade do colega com o exemplo do Alexandre segue código de teste montado.

Código:
create table a03ped ( NumCCF int not null primary key );

insert into a03ped (NumCCF) values (1), (2), (3), (5), (6), (7);
   
select start, stop from (
  select m.NumCCF + 1 as start,
    (select min(NumCCF) - 1 from a03ped as x where x.NumCCF > m.NumCCF) as stop
  from a03ped as m
    left outer join a03ped as r on m.NumCCF = r.NumCCF - 1
  where r.NumCCF is null
) as x
where stop is not null;   

Quebra de sequencia

07 Mar 2017 20:53

Eita lasqueira,

Isso tudo so pra saber que o 4 ta faltando? :P

kkk

Ver aqui no meu codigo o que acontece...

Quebra de sequencia

08 Mar 2017 09:46

Olá

Como não vi como fazer direto em sql, tenho uma função, que resolve , veja se ajuda

Código:
stat func FverPulado(xtabela,xcampo)
   /*
    exemplo de chamada   
    nomeMatrizRetorno:=FverPulado( "cadcli","codigo")
          verifica se tem numeracao pulado na tabela
          retorna matriz com os numeros pulados
          fb_executa é a minha rotina para executar o str, veja a sua
          m_select ´e oretorno da minha funcao f_executa()
          uso strzero  e val , porque os meus codigo sao sempre completos , exe 000001
         
         */
         local xmin,xmax , m_pulados:={} , a

         Str:="select Min("+xcampo+"),Max( "+xcampo+") from "+xtabela+";"      // vefifico a faixa de pesquisa
         fb_executa()   // -é a minha rotina que executa o str  e retorna matriz m_select, verifique a sua
   xmin:=m_select[1,1]

   xmax:= m_select[1,2]
   for a:= val(xmin) to val(xmax)
      // strzero, porque só trablho com numeros completos do tipo "00001"
      str:="select first 1 "+xcampo+" from "+xtabela + " where "+xcampo+" =  '"+ strzero(a,len(xmin)) +"';" 
      fb_executa()
      if empty( m_select)   
         aadd(m_pulados,strzero(a,len(xmin) ) )
      endif
   next   
   msginfo( str(len(m_pulados),5) +" registros pulados")
retu m_pulados         


Poka
Postar uma resposta