Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/04/2013, 12:15
Avatar de iislas
iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Determinar Numeros Faltantes de Varias Secuencias de Numeros

Creo que necesitas entender que para MOVER AL MUNDO, requieres de una BASE, por tanto, analiza este ejemplo e implementalo en tu objetivo.

Código SQL:
Ver original
  1. SET nocount ON;
  2. -- asumimos que es una tabla de sistema base.
  3. CREATE TABLE #_series(
  4. id INT PRIMARY KEY,
  5. txt nvarchar(24)
  6. );
  7. -- dejamos intencionadamente de insertar el id #4 y #8 para realizar su busqueda.
  8. INSERT INTO #_series VALUES(1, 'Notepad');
  9. INSERT INTO #_series VALUES(2, 'Office 2010');
  10. INSERT INTO #_series VALUES(3, 'Visual Studio 2010');
  11. INSERT INTO #_series VALUES(5, 'Windows 7');
  12. INSERT INTO #_series VALUES(6, 'Jaguar SFAX-25');
  13. INSERT INTO #_series VALUES(7, 'Hyper-V');
  14. INSERT INTO #_series VALUES(9, 'Windows Server 2008 R2');
  15. print 'inicio '+CONVERT(nvarchar(50), getdate(), 121);
  16. -- un vistazo.
  17. SELECT * FROM #_series;
  18. -- de hecho, no usaremos cursores.
  19. DECLARE @n1 INT;
  20. DECLARE @nn INT;
  21. -- conseguir el primer y el ultimo numero de la secuencia
  22. SET @n1 = (SELECT top 1 id FROM #_series ORDER BY id ASC);
  23. SET @nn = (SELECT top 1 id FROM #_series ORDER BY id DESC);
  24. -- crear una tabla temporal para la lista de identificadores generados interpolando el n1 y nn.
  25. CREATE TABLE #_se(
  26. id INT
  27. );
  28. print 'iniciar tabla id '+CONVERT(nvarchar(50), getdate(), 121);
  29. DECLARE @i INT;
  30. SET @i = @n1;
  31. while @i <= @nn
  32. BEGIN
  33. INSERT INTO #_se VALUES (@i);
  34. SET @i = @i + 1;
  35. END
  36. print 'fin tabla id '+CONVERT(nvarchar(50), getdate(), 121);
  37. -- conseguir los ids huecos
  38. SELECT id FROM #_se
  39. WHERE NOT EXISTS(SELECT id FROM #_series WHERE #_series.id = #_se.id)     ---- not in (select id from #_series);
  40. -- limpieza
  41. DROP TABLE #_se;
  42. DROP TABLE #_series;
__________________
MCTS Isaias Islas