Skip to content
Maestro

Funciones de ventana en SQL

Al terminar, vas a poder escribir consultas con OVER, PARTITION BY, ROW_NUMBER, RANK, LAG y marcos de ventana, y explicar por qué una suma acumulada repite números o un LAG se salta un mes.

Avanzas a tu ritmo, con tu Maestro que te acompaña en todo el curso: le preguntas lo que quieras y también te pregunta a ti.

12 habilidades · 5 módulos

Lo que vas a poder hacer

Cada recuadro es una habilidad. Abajo está la base, reconocer y explicar, y de ahí vas subiendo hasta construir lo tuyo y juzgar qué funciona y por qué.

  1. Sintetizar

    • Diseñar una consulta que rankea dentro de cada grupo y se queda con los primeros, con PARTITION BY, una función de ranking y QUALIFY

      Dónde lo enseño: Dónde vive una ventana · ¿Cómo saco el top 3 de cada grupo en SQL, con empates?

      Se apoya en:

      • Elegir entre ROW_NUMBER, RANK y DENSE_RANK según cómo tratan los empates
      • Filtrar por el resultado de una ventana con QUALIFY o con WITH, porque WHERE corre antes
      • Ubicar las ventanas y QUALIFY en el orden lógico de una consulta para predecir qué ve cada cláusula

      Tu Maestro te pide construir algo propio con ello y, cuando lo haces, lo guarda como evidencia.

  2. Analizar

    • Elegir entre ROW_NUMBER, RANK y DENSE_RANK según cómo tratan los empates

      Dónde lo enseño: Numerar y quedarte con uno · ¿Qué diferencia hay entre ROW_NUMBER, RANK y DENSE_RANK?

      Se apoya en:

      • Numerar las filas de cada grupo en un orden elegido con ROW_NUMBER()

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

    • Detectar cuándo LAG se salta un periodo que falta, midiendo la distancia entre fechas

      Dónde lo enseño: Mirar a los lados · ¿Por qué LAG se salta un mes que falta y cómo lo encuentro?

      Se apoya en:

      • Comparar cada fila con la anterior o la siguiente de su grupo con LAG y LEAD

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

    • Explicar por qué una suma acumulada repite números en empates y elegir entre ROWS y RANGE

      Dónde lo enseño: Acumular · ¿Por qué mi suma acumulada en SQL repite números?

      Se apoya en:

      • Escribir una suma acumulada por grupo con SUM() OVER (PARTITION BY ... ORDER BY ...)

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

    • Ubicar las ventanas y QUALIFY en el orden lógico de una consulta para predecir qué ve cada cláusula

      Dónde lo enseño: Dónde vive una ventana · ¿En qué orden se ejecuta una consulta SQL con funciones de ventana?

      Se apoya en:

      • Filtrar por el resultado de una ventana con QUALIFY o con WITH, porque WHERE corre antes

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

  3. Aplicar

    • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Dónde lo enseño: Sin perder filas · ¿Cómo pongo el total del grupo junto a cada fila sin perder filas?

      Se apoya en:

      • Explicar cómo una función de ventana calcula un valor para cada fila sin juntar filas, a diferencia de GROUP BY

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Numerar las filas de cada grupo en un orden elegido con ROW_NUMBER()

      Dónde lo enseño: Numerar y quedarte con uno · ¿Cómo numero las filas de cada grupo con ROW_NUMBER?

      Se apoya en:

      • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Filtrar por el resultado de una ventana con QUALIFY o con WITH, porque WHERE corre antes

      Dónde lo enseño: Numerar y quedarte con uno · ¿Cómo me quedo con el último registro de cada grupo en SQL?

      Se apoya en:

      • Numerar las filas de cada grupo en un orden elegido con ROW_NUMBER()

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Comparar cada fila con la anterior o la siguiente de su grupo con LAG y LEAD

      Dónde lo enseño: Mirar a los lados · ¿Cómo comparo cada fila con la del mes anterior en SQL con LAG?

      Se apoya en:

      • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Escribir una suma acumulada por grupo con SUM() OVER (PARTITION BY ... ORDER BY ...)

      Dónde lo enseño: Acumular · ¿Cómo hago una suma acumulada en SQL?

      Se apoya en:

      • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Calcular un promedio móvil con ROWS BETWEEN n PRECEDING AND CURRENT ROW

      Dónde lo enseño: Acumular · ¿Cómo saco un promedio móvil de 3 meses en SQL?

      Se apoya en:

      • Escribir una suma acumulada por grupo con SUM() OVER (PARTITION BY ... ORDER BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

  4. Comprender

    • Explicar cómo una función de ventana calcula un valor para cada fila sin juntar filas, a diferencia de GROUP BY

      Dónde lo enseño: Sin perder filas · ¿Cómo pongo el total del grupo junto a cada fila sin perder filas?

      Tu Maestro te pide explicarlo con tus palabras y, cuando lo haces, lo guarda como evidencia.

Lo que vamos a ver

  1. Sin perder filas

    1. ¿Cómo pongo el total del grupo junto a cada fila sin perder filas?
    2. ¿Qué diferencia hay entre PARTITION BY y GROUP BY?
  2. Numerar y quedarte con uno

    1. ¿Cómo numero las filas de cada grupo con ROW_NUMBER?
    2. ¿Qué diferencia hay entre ROW_NUMBER, RANK y DENSE_RANK?
    3. ¿Cómo me quedo con el último registro de cada grupo en SQL?
  3. Mirar a los lados

    1. ¿Cómo comparo cada fila con la del mes anterior en SQL con LAG?
    2. ¿Por qué LAG se salta un mes que falta y cómo lo encuentro?
  4. Acumular

    1. ¿Cómo hago una suma acumulada en SQL?
    2. ¿Por qué mi suma acumulada en SQL repite números?
    3. ¿Cómo saco un promedio móvil de 3 meses en SQL?
  5. Dónde vive una ventana

    1. ¿En qué orden se ejecuta una consulta SQL con funciones de ventana?
    2. ¿Cómo saco el top 3 de cada grupo en SQL, con empates?

Preguntas frecuentes

¿Qué necesito saber antes de empezar?
SELECT, WHERE, ORDER BY, funciones como SUM y COUNT, GROUP BY y consultas con WITH (CTE). Si alguno te es nuevo, el curso SQL para gente de datos los enseña desde cero; este curso empieza justo donde ese termina.
¿Es gratis? ¿Necesito una cuenta?
Es gratis. Puedes leer todas las páginas sin cuenta. Con una cuenta gratis te inscribes con un toque, corres las consultas de cada página y le preguntas a tu Maestro.
¿Tengo que instalar algo?
No. Las consultas corren en DuckDB dentro de Maestro: escribes en la página y ves el resultado debajo.
Uso otro motor en el trabajo. ¿Me sirve?
Practicas en DuckDB. Cuando usamos QUALIFY, que no todos los motores aceptan, también ves la misma consulta con un CTE y WHERE, que no depende de QUALIFY. Si tienes dudas con tu motor, pregúntale a tu Maestro.
¿Los datos son reales?
No. Las ventas de las sucursales, los pedidos y los productos son datos inventados para el curso, pensados para que aparezcan los casos difíciles: empates, un mes que falta y dos pedidos el mismo día.

Lo que recibes

  • 5 módulos y 12 páginas, todo abierto para cuando quieras.
  • Abierto a todos: se lee completo, y tu Maestro, una IA, te responde una pregunta por página, en hasta cinco páginas al día.

  • Con tu cuenta gratis: tu Maestro en todo el curso, siempre en la página donde vas, y los ejercicios corren sin instalar nada.

Palabras que vas a encontrar

En las lecciones, tocas una y ves qué significa, o se la preguntas a tu Maestro.

Quién te va a enseñar

Sergio Sánchez

I'm Sergio, chekos online. I've worked with data for about ten years, mostly at mission-driven organizations: policy research first, then education, and now early childhood services. In 2018 I started tacosdedatos to share what I was learning, and since then it's been a blog, a podcast, courses, guides, and a community. These days I spend a lot of my time building with AI agents and writing about how I organize my work around them. I share what I've learned; you take what's useful and make it yours.

Nos vemos en el curso

Funciones de ventana en SQL