Descobrir Lacunas numa sequencia
29/09/2003
0
Alguém poderia me ajudar para conseguir a relação das lacunas existentes num intervalo de registro?
Muito Obrigada
Dps
Post mais votado
03/03/2004
A idéia do Anderson é muito boa e funcional mas aí vai uma outra idéia.
1. Crie uma tabela temporária e faça o Insert dos valores de 1 até 75000.
2. Para localizar as lacunas faça:
select * from TEMP a
where not exists (select distinct chave from suatab b where a.chave=b.chave)
Fica a seu critério selecionar a forma mais rápida de implementar.
Gabriel
Gatoledo
Mais Posts
20/10/2003
Anderson_dpa
Create table faltantes(Numero integer)
2º Executar o seguinte Script no Query Analiser
declare @registros integer
set @registros=1
while @Registro <= 75000
begin
If not Exists(Select numero from suatab where numero=@registros)
Begin
INSERT INTO FALTANTES(@REGISTROS)
Commit Tran
End
set @Registros=@Registros +1
end
Grande abraço e boa sorte
Anderson...
andersondpa@hotmail.com
20/10/2003
Anderson_dpa
Anderson...
20/08/2020
Alvaro Vieira
fiz uma pequena mudança na sugestão do Anderson:
SET NOCOUNT ON
--Assim você não precisa da tabela física no banco
DECLARE @FALTANTES TABLE (NUMERO INTEGER)
declare @registros integer
set @registros=1
while @registros <= 75000
begin
If not Exists(Select numero from suatab where numero=@registros)
Begin
INSERT INTO @FALTANTES VALUES (@registros)
End
set @registros=@registros +1
end
SELECT *
FROM @FALTANTES
21/08/2020
Emerson Nascimento
utilize o recurso CTE (common table expression).
WITH CTE (ID) AS ( SELECT 1 ID -- aqui você indica o valor inicial dos dados temporários UNION ALL SELECT C.ID+1 FROM CTE C -- aqui é o incremento ) SELECT CTE.ID FROM CTE LEFT JOIN TUA_TABELA TT WITH(NOLOCK) ON TT.NUMERO = CTE.ID -- aqui é feito o relacionamente da tabela CTE com a tua tabela WHERE CTE.ID <= 75000 -- aqui você indica o número final a ser avaliado AND TT.NUMERO IS NULL -- aqui está a a condição para exibição dos registros. no caso, quando o NUMERO estiver faltando na tua tabela OPTION (MAXRECURSION 0)
use a opção WITH(NOLOCK) se NÃO quiser ficar esperando a finalização de transações que estiverem 'segurando' os registros da tua tabela.
10/02/2023
Marnad Maia
to tentando resolver essa questao aqui de prova, envolvendo sql server
14/02/2023
Arthur Heinrich
select codigo_ant, codigo from ( select lag(codigo) over(partition by 1 order by codigo) codigo_ant, codigo from tabela ) t where codigo-codigo_ant > 1
14/02/2023
Emerson Nascimento
select 'Falta(m) ' + cast(codigo-codigo_ant-1 as varchar(10)) + ' número(s) entre ' + cast(codigo_ant as varchar(10)) + ' e ' + cast(codigo as varchar(10)) ocorrencias from ( select lag(codigo) over(partition by 1 order by codigo) codigo_ant, codigo from tabela ) t where codigo-codigo_ant > 1
Clique aqui para fazer login e interagir na Comunidade :)