0Pricing
SQL Academy · Lección

Generación de series y secuencias

Cree filas mediante recursividad

Generación de series y secuencias es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué es una serie generada?

A veces necesita una lista de números, fechas u otros valores secuenciales que no existen en ninguna tabla. SQL permite crearlos al vuelo mediante recursión o funciones integradas.

En esta lección aprenderá a generar secuencias mediante WITH RECURSIVE, una herramienta potente que permite que una consulta haga referencia a su propia salida.

Su primera CTE recursiva

Una CTE recursiva (expresión de tabla común) tiene dos partes unidas mediante UNION ALL: un caso base que produce la primera fila y un paso recursivo que hace referencia a la propia CTE para producir la siguiente fila.

La recursión se detiene cuando el paso recursivo no devuelve ninguna fila.

WITH RECURSIVE counter(n) AS (
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM counter WHERE n < 5
)
SELECT n FROM counter;

Cómo se despliega la recursión

Resulta útil imaginar cada paso por separado. El caso base inicia la tabla y, después, cada pasada recursiva añade una fila más hasta que la condición WHERE deja de cumplirse.

Para la consulta WHERE n < 5, el motor genera las filas 1, 2, 3, 4 y 5, y después se detiene porque 5 < 5 es falso.

WITH RECURSIVE steps(n, note) AS (
  SELECT 1, 'base case'
  UNION ALL
  SELECT n + 1, 'recursive step'
  FROM steps
  WHERE n < 4
)
SELECT n, note FROM steps;

Generar números pares

Puede cambiar el tamaño del paso simplemente sumando más de 1 en la parte recursiva. Así se genera cada número par del 2 al 10.

El patrón siempre es: next_value = current_value + step.

WITH RECURSIVE evens(n) AS (
  SELECT 2
  UNION ALL
  SELECT n + 2 FROM evens WHERE n < 10
)
SELECT n FROM evens;

Contar hacia atrás

La recursión no se limita a contar hacia arriba. Reste en lugar de sumar y obtendrá una secuencia descendente. Asegúrese de que la condición de parada utilice > en lugar de < para evitar un bucle infinito.

WITH RECURSIVE countdown(n) AS (
  SELECT 10
  UNION ALL
  SELECT n - 1 FROM countdown WHERE n > 1
)
SELECT n FROM countdown;

Generar un intervalo de fechas

Uno de los usos más prácticos de las CTE recursivas consiste en crear una serie de fechas. Comience con una fecha específica y siga sumando un día hasta llegar a una fecha final.

Esto resulta especialmente útil para completar huecos en los informes: aparece cada fecha aunque no haya datos correspondientes a ese día.

WITH RECURSIVE dates(d) AS (
  SELECT DATE '2024-01-01'
  UNION ALL
  SELECT d + INTERVAL '1 day'
  FROM dates
  WHERE d < DATE '2024-01-07'
)
SELECT d FROM dates;

Completar huecos en informes con una serie de fechas

Imagine una tabla sales que solo contiene filas en los días en que hubo ventas. Al unir una serie de fechas generada con la tabla de ventas mediante un LEFT JOIN, obtiene todos los días del intervalo, con NULL en los días sin ventas.

WITH RECURSIVE cal(d) AS (
  SELECT DATE '2024-03-01'
  UNION ALL
  SELECT d + INTERVAL '1 day' FROM cal WHERE d < DATE '2024-03-05'
),
sales(sale_date, amount) AS (
  VALUES
    (DATE '2024-03-01', 100),
    (DATE '2024-03-03', 250),
    (DATE '2024-03-05', 180)
)
SELECT cal.d, COALESCE(sales.amount, 0) AS amount
FROM cal
LEFT JOIN sales ON cal.d = sales.sale_date
ORDER BY cal.d;

Generar una tabla de multiplicar

Las CTE recursivas pueden transportar varias columnas, lo que permite crear resultados más completos. Aquí se siguen simultáneamente un índice de fila y un valor calculado.

WITH RECURSIVE mult(n, result) AS (
  SELECT 1, 1 * 7
  UNION ALL
  SELECT n + 1, (n + 1) * 7
  FROM mult
  WHERE n < 10
)
SELECT n, result AS seven_times_n FROM mult;

Números de Fibonacci

Fibonacci es una secuencia clásica en la que cada número es la suma de los dos anteriores: 0, 1, 1, 2, 3, 5, 8 …

Una CTE recursiva sigue tanto el valor actual a como el siguiente valor b, y los intercambia en cada paso.

WITH RECURSIVE fib(a, b) AS (
  SELECT 0, 1
  UNION ALL
  SELECT b, a + b FROM fib WHERE a < 100
)
SELECT a AS fibonacci FROM fib;

Usar generate_series en PostgreSQL

PostgreSQL ofrece un atajo integrado llamado generate_series() que produce secuencias sin necesidad de escribir una CTE recursiva. Acepta un inicio, un final y un paso opcional.

Esta es la forma más concisa de generar intervalos de números o fechas en PostgreSQL.

SELECT gs AS num
FROM generate_series(1, 10, 2) AS gs;

Generar intervalos mensuales

Pase un intervalo de '1 month' a generate_series() para crear un calendario mensual. Esto resulta perfecto para crear encabezados de informes mensuales o comprobar qué meses no tienen datos.

SELECT gs::DATE AS month_start
FROM generate_series(
  '2024-01-01'::DATE,
  '2024-06-01'::DATE,
  INTERVAL '1 month'
) AS gs;

Comprobación de conocimientos

Compruebe su comprensión de la generación de series con CTE recursivas.

Resumen: generar series y secuencias

En esta lección ha aprendido a producir secuencias de números y fechas sin ninguna tabla de origen:

  • WITH RECURSIVE — un caso base más un paso recursivo unidos mediante UNION ALL; se detiene cuando el paso recursivo no devuelve ninguna fila.
  • Tamaño de paso flexible — sume o reste cualquier valor para contar hacia arriba, contar hacia abajo u omitir valores.
  • Intervalos de fechas — añada un intervalo para generar series de calendario diarias, mensuales o personalizadas.
  • CTE de varias columnas — transporte información de estado adicional entre iteraciones para obtener resultados más completos, como Fibonacci.
  • generate_series() — función integrada de PostgreSQL para crear secuencias de números y fechas de la forma más concisa.

Las series generadas son esenciales para completar huecos en informes, crear datos de prueba y resolver cualquier situación en la que necesite un intervalo completo de valores, independientemente del contenido de los datos.

Preguntas frecuentes

¿La lección «Generación de series y secuencias» es gratis?

Sí — el texto completo de «Generación de series y secuencias» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Generación de series y secuencias»?

Cree filas mediante recursividad Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Generación de series y secuencias»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Cómo funcionan las CTE recursivas
  2. Recorrido de un árbol de categorías
  3. Generación de series y secuencias
  4. Cómo evitar bucles infinitos
← Volver a SQL Academy