es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Falta el Id de la tabla mostrada en dos columnas.

Quiero obtener la lista de números de ID que faltan en una tabla.

;CON Missing (missnum, maxid)
AS
(
SELECT 1 AS missnum, (select max(id) from MYTABLE)
UNION ALL
SELECT missnum + 1, maxid FROM Missing
WHERE missnum < maxid
)
SELECT missnum
FROM Missing
LEFT OUTER JOIN MYTABLE on MYTABLE.id = Missing.missnum
WHERE MYTABLE.id is NULL
OPTION (MAXRECURSION 0);

Lista de números de ID faltantes:

id
2
3
4
5
7
8
9

Pero no quiero que la lista muestre cada número individual – solo una lista con dos columnas como:

Mi salida debería ser:

desde hasta
2 5
7 9

Ahora puedo ver que mi pregunta no fue lo suficientemente clara.

Tengo una larga lista de miles de filas de números;

2,3,4 … 36
401,402,403 … 807
1234,1235 … 1240

Me gustaría presentarlos como;

desde hasta
2 36
401 807
1234 1240
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para obtener la salida deseada, se puede modificar la consulta original de la siguiente manera:

    WITH MissingRanges (startid, endid)
    AS
    (
      SELECT 
        MIN(id) AS startid, 
        (SELECT MIN(id) FROM MYTABLE WHERE id > t.id AND NOT EXISTS (SELECT 1 FROM MYTABLE WHERE id = t.id + 1)) AS endid
      FROM 
        MYTABLE t
      WHERE NOT EXISTS (SELECT 1 FROM MYTABLE WHERE id = t.id - 1)
    )
    SELECT startid, endid
    FROM MissingRanges
    WHERE endid IS NOT NULL;
    

    Esta consulta utiliza un enfoque diferente para encontrar los números de ID faltantes. Primero identifica el inicio y fin de cada rango faltante (es decir, el primer y último número faltante en una secuencia continua), y luego selecciona solo aquellos rangos que tienen un ID final (es decir, no son el último rango faltante).

    La salida tendrá el formato deseado con dos columnas que representan el inicio y el fin de cada rango faltante.

Comments are closed.