SQL Academy · Lección

LAG, LEAD y patrones de series temporales

Compare cada fila con su fila anterior o siguiente mediante LAG y LEAD, y cree diferencias entre periodos.

Lección 3 de 413 pasos

LAG, LEAD y patrones de series temporales 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.

LAG y LEAD: mirar hacia atrás y hacia delante

Estas funciones acceden a las filas vecinas de la ventana:

  • LAG(col, n, default) — valor n filas antes de la fila actual
  • LEAD(col, n, default) — valor n filas después

Fila anterior

Compare cada pedido con el anterior del mismo usuario:

SELECT id, user_id, created_at, total,
       LAG(total) OVER (
         PARTITION BY user_id ORDER BY created_at
       ) AS prev_total
FROM orders;

Diferencia entre días

Diferencia con respecto al día anterior:

SELECT day, revenue,
       revenue - LAG(revenue) OVER (ORDER BY day) AS delta
FROM daily_revenue
ORDER BY day;

Variación interanual

LAG con un desplazamiento de 12 en una serie mensual:

SELECT month, revenue,
       LAG(revenue, 12) OVER (ORDER BY month) AS prev_year_revenue,
       revenue / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) - 1 AS yoy
FROM monthly_revenue;

Detectar huecos

Encuentre los días en los que faltan datos:

WITH d AS (
  SELECT day, LAG(day) OVER (ORDER BY day) AS prev_day FROM daily_signups
)
SELECT day, prev_day, day - prev_day AS gap_days
FROM d
WHERE day - prev_day > 1;

Creación de sesiones

Agrupe las filas en sesiones cuando el intervalo supere un umbral:

WITH gaps AS (
  SELECT user_id, ts,
         CASE WHEN ts - LAG(ts) OVER (PARTITION BY user_id ORDER BY ts)
                 > INTERVAL '30 min'
              THEN 1 ELSE 0 END AS new_session
  FROM events
)
SELECT user_id, ts,
       SUM(new_session) OVER (PARTITION BY user_id ORDER BY ts) AS session_id
FROM gaps;

Primero y último del grupo

FIRST_VALUE y LAST_VALUE recuperan los límites de la ventana:

SELECT id, total,
       FIRST_VALUE(total) OVER (PARTITION BY user_id ORDER BY created_at) AS first_order,
       LAST_VALUE(total)  OVER (PARTITION BY user_id ORDER BY created_at
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS last_order
FROM orders;
-- LAST_VALUE needs the explicit frame, otherwise default frame ends at current row.

NTH_VALUE

Seleccione el valor N de la partición:

SELECT id,
       NTH_VALUE(total, 2) OVER (
         PARTITION BY user_id ORDER BY total DESC
         ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
       ) AS second_largest
FROM orders;

Valor predeterminado en series temporales

El tercer argumento de LAG es el valor predeterminado cuando no existe una fila anterior:

SELECT day, revenue,
       revenue - LAG(revenue, 1, 0) OVER (ORDER BY day) AS delta
FROM daily_revenue;
-- delta on first day = revenue itself (vs NULL)

Equivalente con autoJOIN

Podría escribir LAG como un autoJOIN, pero sería más lento y menos claro. Prefiera siempre las funciones de ventana.

Rendimiento

Las funciones de ventana recorren la partición una vez. El cuello de botella es la ordenación; cree índices para las columnas de ORDER BY siempre que sea posible.

Resumen

LAG y LEAD permiten comparar filas entre sí.

  • Fila anterior o siguiente dentro de la partición
  • Diferencias, variaciones entre periodos y creación de sesiones
  • FIRST_VALUE/LAST_VALUE para obtener los límites

Comprobación rápida

Quiere calcular la variación diaria de los ingresos. ¿Qué función de ventana debe usar?

Gratis para empezar

Aprende SQL con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
46
Lecciones
183

Preguntas frecuentes

¿La lección «LAG, LEAD y patrones de series temporales» es gratis?

Sí — el texto completo de «LAG, LEAD y patrones de series temporales» 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 «LAG, LEAD y patrones de series temporales»?

Compare cada fila con su fila anterior o siguiente mediante LAG y LEAD, y cree diferencias entre periodos. 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 «LAG, LEAD y patrones de series temporales»?

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. OVER, PARTITION BY y ORDER BY
  2. ROW_NUMBER, RANK y DENSE_RANK
  3. LAG, LEAD y patrones de series temporales
  4. Totales acumulados y medias móviles
← Volver a SQL Academy