Tema SQL
generate_series() (PostgreSQL)
Genera una serie de valores numéricos o de tiempo entre inicio y fin con paso opcional. Tabla virtual muy usada para calendarios, rellenar huecos y probar planes; no tiene equivalente de una función en MySQL ni SQL Server.
Descripción
generate_series(inicio, fin [, paso]) devuelve un conjunto de filas (función de conjunto en la gramática de PostgreSQL). Con enteros o bigint produce 1,2,…,N; con timestamp/date y paso interval genera marcas de tiempo. Es la base de patrones «una fila por día» sin tablas auxiliares. Combina con JOIN para densificar series incompletas o con LEFT JOIN desde una tabla de hechos. En SQL Server suele usarse una tabla de números o recursive CTE; en MySQL variables o tablas generadas. Cuidado con series enormes: pueden consumir memoria y tiempo; filtra rangos razonables. Para tipos time sin fecha, el comportamiento depende de la sobrecarga elegida.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
generate_series(inicio, fin [, paso])
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Tipos
- Sobrecargas para integer, bigint, numeric, timestamp, date, con paso del mismo dominio o INTERVAL.
- Uso típico
- CROSS JOIN generate_series para expandir dimensiones; anti-join para detectar fechas faltantes.
- Otros motores
- Sin función idéntica en el estándar; alternativas más verbosas.
Ejemplos
Ejemplo 1
SELECT * FROM generate_series(1, 5) AS n;
SELECT d::date
FROM generate_series(
DATE '2026-01-01',
DATE '2026-01-07',
INTERVAL '1 day'
) AS d;
Ejemplo 2
SELECT gs.n,
COALESCE(v.cnt, 0) AS ventas
FROM generate_series(1, 12) AS gs(n)
LEFT JOIN ventas_mes v ON v.mes = gs.n;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.