Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Conocer el menor inexistente (https://www.clubdelphi.com/foros/showthread.php?t=39610)

brandolin 25-01-2007 07:41:18

Conocer el menor inexistente
 
Les explico lo que necesito....

Tengo una secuencia de numeros 1,2,3,4,6,8,9,10 y por lo que se puede ver falta el numero 5, 7. Cada uno de estos numero es un registro de una tabla firebird 1.5.

Lo que necesito es que (de ser posible) una instruccion sql me devuelva el numero 5 que es el "menor inexistente"

PD: Actualmente lo estoy haciendo recorriendo de a uno los registros pero no es para nada optimo ya que cuando se tienen que recorrer cerca 100.000 registros demora "un poquito"....

Bueno, desde ya muchas gracias

Neftali [Germán.Estévez] 25-01-2007 11:44:35

Se me ocurre una forma, utilizando una tabla auxiliar, que seguramente será un poco más rápida a la hora de calcularlo...


TablaA (la de la secuencia de números que tu tienes...) ; Supongamos que es así...
--------------------------------------
Campo1 Campo2 Campo3
1______A________12783
2______B
________567
3______C________345
4______D________...
6______...
8
9


Creas la tabla de apoyo:

TablaB (sólo un campo autonumérico)
------------------------------------
num
1
2
3
4
5

...

La siguiente consulta te da los que no existen:

Código SQL [-]
// nomenclatura de SQl Server, pero la de FB/IB debe ser casi igual...
Select TablaB.num from TablaA 
right join TablaB on TablaA.Campo1=TablaB.num
where Campo1 is NULL

NOTAS:
1) La tabla de apoyo tiene que tener un número de registros tal qyue llegue al máximo (como mínimo) del campo1 de la tabla A.
2) Para saber cual es el último número válido de la tabla A, puedes usar un:

Código SQL [-]
  select max(TablaA.Campo1) from TablaA

Un saludo.

fdelamo 25-01-2007 12:02:48

Hola,

¿por que no se hace con la misma tabla?

Código SQL [-]
SELECT MIN(A.ID+1)
FROM TABLA A
LEFT JOIN TABLA B ON (A.ID = B.ID-1)
WHERE B.ID IS NULL

Neftali [Germán.Estévez] 25-01-2007 12:27:00

Cita:

Empezado por brandolin
Lo que necesito es que (de ser posible) una instruccion sql me devuelva el numero 5 que es el "menor inexistente"

Perdón, no se cómo he leído antes el menaje que estaba pensando en la lista de todos los números no existentes, no en el mínimo. ¿?¿?¿?¿


La franja horaria es GMT +2. Ahora son las 01:16:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi