PDA

Ver la Versión Completa : Numeros faltantes


Caral
24-01-2007, 23:32:25
Hola a todos y gracias de antemano.
Mi consulta es la siguiente:
Ejemplo:
Tengo una tabla con un campo numerico (Numero), en este hay logicamente numeros.
2500
3998
4000
4001
4003
4004
4008
etc.
Como puedo saber de esta lista cuales faltan, teniendo en cuenta que son consecutivos del 1 en adelante y que el campo puede contener mas de 10000 numeros diferentes.
Si fuera posible que me indicaran un procedimiento o funcion se los agradeceria.
Me gustaria poder colocar dos edit y definir entre ellos cuales numeros faltan.
y que se mostrara en un grid.
Nota:
No manejo muy bien las funciones, si me explican lo agradecere mucho.:D
Ya se que pido mucho, pero la verdad no se me ocurre como hacerlo.:rolleyes:
Saludos

Robert01
24-01-2007, 23:49:45
Podrías usar un contador que vaya desde el más pequeño al ultimo, en cada paso del bucle pruebas si está el número o si falta.

O sino podrías poner todos los números en un arreglo e ir comprobando cuales no están en tu lista.

saludos

roman
25-01-2007, 00:00:52
Quizá un poco descabellado pero se me ocurre esto:

Creas una tabla numeros con un sólo campo numero e insertas todos los números hasta el mayor posible. Esto lo puedes hacer con un simple ciclo:


Query.SQL.Text := "insert into numeros values(:numero)";

for I := 1 to MaximoNumero do
begin
Query.ParamByName('numero').AsInteger := I;
Query.ExecSQL;
end;


Luego, para averiguar cuáles número faltan entre un primer y último número usas la consulta:



select * from numeros
where
numero not in (select numero from tu_tabla) and
numero between :primero and :ultimo



Sustituyes los parámetros y lanzas la consulta:


Query.ParamByName('primero').AsInteger := EditPrimerNumero.Text;
Query.ParamByName('ultimo').AsInteger := EditUltimoNumero.Text;

Query.Open;


// Saludos

fdelamo
25-01-2007, 12:06:12
Hola,

prueba esto que he contestado en otro hilo:


SELECT A.ID+1
FROM TABLA A
LEFT JOIN TABLA B ON (A.ID = B.ID-1)
WHERE B.ID IS NULL


lo único que deberías desechar el valor más grande, porque será el siguiente al mayor.

Un saludo

Caral
25-01-2007, 20:36:31
Gracias a todos por sus respuestas
Voy a probar todas
Gracias
Saludos