SQL Academy · Lección

Informes habituales de fechas (MTD, WoW, YoY)

Cree informes del mes hasta la fecha, semana contra semana y año contra año con date_trunc y auto-uniones o funciones de ventana.

Lección 4 de 413 pasos

Informes habituales de fechas (MTD, WoW, YoY) es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 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.

Tres informes clásicos por periodo

Casi todos los paneles empresariales necesitan:

  • MTD — Month-to-Date
  • WoW — Week-over-Week
  • YoY — Year-over-Year

Acumulado del mes

Suma de lo que va de mes:

SELECT SUM(total) AS mtd_revenue
FROM orders
WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

Acumulado del año

El mismo patrón, con granularidad anual:

SELECT SUM(total) AS ytd_revenue
FROM orders
WHERE created_at >= date_trunc('year', NOW());

Semana contra semana

Compare esta semana con la anterior:

SELECT
  SUM(total) FILTER (
    WHERE created_at >= date_trunc('week', NOW())
  ) AS this_week,
  SUM(total) FILTER (
    WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week'
      AND created_at <  date_trunc('week', NOW())
  ) AS last_week
FROM orders
WHERE created_at >= date_trunc('week', NOW()) - INTERVAL '1 week';

Año contra año

El mismo periodo frente al mismo periodo del año anterior:

SELECT date_trunc('month', created_at) AS month, SUM(total)
FROM orders
WHERE created_at >= NOW() - INTERVAL '2 years'
GROUP BY 1
ORDER BY 1;

-- Then plot with two lines: current year, previous year.

Series diarias sin saltos

Si no se producen pedidos en un día, GROUP BY lo omite. Genere una serie de calendario completa y haga un LEFT JOIN:

SELECT day, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(
  CURRENT_DATE - INTERVAL '30 days',
  CURRENT_DATE,
  INTERVAL '1 day'
) AS day
LEFT JOIN orders o ON date_trunc('day', o.created_at) = day
GROUP BY day
ORDER BY day;

Totales acumulados

Una función de ventana calcula una suma acumulada sin autocombinaciones:

SELECT day,
       revenue,
       SUM(revenue) OVER (ORDER BY day) AS running_total
FROM daily_revenue
ORDER BY day;

Diferencia entre periodos

Crecimiento interanual mediante LAG:

SELECT month,
       revenue,
       LAG(revenue, 12) OVER (ORDER BY month) AS prev_year,
       (revenue - LAG(revenue, 12) OVER (ORDER BY month))
         / NULLIF(LAG(revenue, 12) OVER (ORDER BY month), 0) AS yoy_growth
FROM monthly_revenue;

Últimos 7 o 30 días (ventana móvil)

Una ventana móvil frente a una alineada con el calendario. Elija la que refleje realmente lo que significa para su negocio:

-- Trailing 7 days, ending now:
WHERE created_at >= NOW() - INTERVAL '7 days';

-- This calendar week, from Monday:
WHERE created_at >= date_trunc('week', NOW());

Consideraciones sobre la zona horaria

"Hoy" depende de la zona del usuario. Convierta los datos antes de truncarlos:

SELECT date_trunc('day', created_at AT TIME ZONE 'America/Los_Angeles') AS la_day,
       COUNT(*)
FROM events
GROUP BY 1;

Preagregar con vistas materializadas

Si un informe se ejecuta cada vez que se carga una página, materialícelo una vez al día. Se explica en Vistas materializadas.

Repaso

Los informes por periodo se basan en unos pocos patrones.

  • Intervalos semiabiertos con date_trunc
  • FILTER para agrupar periodos en paralelo
  • generate_series + LEFT JOIN para completar los días sin datos
  • LAG para las diferencias entre periodos

Comprobación rápida

¿Qué expresión marca "el primer instante de este mes"?

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 «Informes habituales de fechas (MTD, WoW, YoY)» es gratis?

Sí — el texto completo de «Informes habituales de fechas (MTD, WoW, YoY)» 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 «Informes habituales de fechas (MTD, WoW, YoY)»?

Cree informes del mes hasta la fecha, semana contra semana y año contra año con date_trunc y auto-uniones o funciones de ventana. 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 4 de 4.

¿Cuánto tiempo toma la lección «Informes habituales de fechas (MTD, WoW, YoY)»?

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. Aritmética de fechas e INTERVAL
  2. EXTRACT, DATE_TRUNC y AGE
  3. Zonas horarias: TIMESTAMP frente a TIMESTAMPTZ
  4. Informes habituales de fechas (MTD, WoW, YoY)
← Volver a SQL Academy