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é. Pasa el cursor sobre un recuadro para ver en qué se apoya. Haz clic para ver dónde lo enseño y cómo lo revisa tu Maestro.
- Sintetizar
- Analizar
- Aplicar
- Comprender
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.
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.
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.
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
Sin perder filas
Numerar y quedarte con uno
Mirar a los lados
Acumular
Dónde vive una ventana
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