Las noches son cada vez más largas. Los refugios que siguen en pie son fortalezas solitarias rodeadas de silencio y muerte. Pero los supervivientes que completaron las dos primeras partes de esta serie son distintos: dominan SELECTs afilados, JOINs letales y cálculos capaces de prever el caos. Han llegado hasta aquí por méritos propios.
Si acabas de llegar: detente. Aquí no hay atajos. Vuelve al primer capítulo y luego al segundo capítulo para convertirte en un verdadero experto en análisis de datos para sobrevivir al apocalipsis.
Hoy cruzaremos la última frontera: funciones de ventana, CTEs, ROLLUP y CUBE. Con estas habilidades, no solo resistirás: podrás planificar la evacuación, anticiparte a cada ataque y construir un futuro para los últimos humanos.
SurvivalDB: el campo de batalla definitivo
Nuestra base de datos SurvivalDB ha sido nuestro campo de entrenamiento y nuestra línea de defensa y en este último asalto no iba a ser menos. Sus tablas ya te son conocidas: RefugeSupplies, SurvivorStats, MutantSightings y EvacuationRoutes. Hoy, sacaremos todo el jugo posible de sus datos.

Ejercicios: la misión final para salvar a la humanidad
Después de una semana de resistencia, los refugios que aún aguantan necesitan más que coraje: requieren análisis avanzados para planificar el contragolpe o la evacuación definitiva. Hoy vamos a cruzar la última frontera de SQL: funciones de ventana que muestran lo que sucede a tu alrededor, CTEs que revelan rutas de huida imposibles y agregaciones que transforman el caos en información estratégica.
Cada consulta que planteamos a continuación no es sólo un ejercicio: es un paso esencial para decidir si la humanidad logra resistir un día más… o se convierte en recuerdo. Afilad vuestro teclado: el futuro se escribe en T-SQL.
Ejercicio 1: Prioriza refugios con funciones de ventana
Necesitamos saber el orden de prioridad para reforzar refugios: los que más armas tengan irán al final; primero hay que ayudar a los peores armados.
Tu misión: mostrar la información de los refugios con una columna WeaponsRank que indique la posición de cada refugio en el ranking por número de armas.
Pista: cuando la prioridad depende del orden, las funciones de ventana son tu aliado.
Ejercicio 2: Compara infectados con LAG y LEAD
El Consejo de la Resistencia necesita saber si las infecciones están empeorando refugio a refugio. Comparar cada refugio con el anterior y el siguiente permitirá identificar focos crecientes.
Tu misión: mostrar RefugeID e Infected para cada refugio además de PrevInfected y NextInfected con los valores del refugio anterior y siguiente respectivamente.
Pista: dos funciones en la misma cláusula OVER te darán el pasado y el futuro.
Ejercicio 3: Totaliza avistamientos con ROLLUP
Los analistas necesitan saber la actividad mutante diaria y por zona, pero también los totales diarios y el gran total. Esta vista global decidirá si debemos evacuar o resistir.
Tu misión: agrupar avistamientos por fecha y coordenadas (Latitude, Longitude) y usa ROLLUP para incluir los totales parciales y el gran total.
Pista: agrupar con ROLLUP es como un seguro: te dará todos los niveles de resumen.
Ejercicio 4: Construye rutas de evacuación con CTE recursiva
La evacuación debe organizarse como una cadena desde el refugio inicial al último refugio seguro. Cada ruta conecta dos refugios; necesitamos todas las rutas posibles desde el refugio 1 para planificar el éxodo.
Tu misión: crear una CTE recursiva que muestre todas las rutas desde el refugio 1, listando la secuencia completa de refugios visitados como Path.
Pista: una CTE que se llame a sí misma traza caminos que una simple consulta jamás encontraría.
Ejercicio 5: Agrega por combinaciones con CUBE
Para decidir la distribución de suministros y armas, necesitamos un análisis de refugios agrupados por su estado (CRITICAL u OK) y por rango de armas (0-20, 21-50, >50). Los totales por cada combinación y los globales son imprescindibles.
Tu misión: agrupar por ambos criterios y usar CUBE para obtener todos los totales parciales y el gran total, mostrando también el número de refugios (RefugeCount).
Pista: CUBE permite ver cada combinación posible y cada subtotal en una sola consulta.
Consejo final: sobrevivir no es suerte, es optimización
Llegar hasta aquí no ha sido casualidad. Cada consulta ha reforzado tus habilidades y tu refugio. Pero como cualquier buen plan de supervivencia, hay que mantenerlo actualizado: los índices se fragmentan, los datos crecen y las hordas evolucionan. No bajes la guardia.
¿Quieres las respuestas?
El próximo martes tendremos en YouTube un vídeo con las soluciones paso a paso de este y los anteriores capítulos para que compruebes tu progreso y consolides tu aprendizaje. Pero si lo ves sin practicar antes… no esperes sobrevivir mucho tiempo. Trata de resolver estos ejercicios por tu cuenta antes de recurrir al vídeo y deja en comentarios tus respuestas.
El amanecer tras la noche más oscura
Han pasado varios días desde los primeros ataques. Gracias a los análisis, los refugios críticos fueron reforzados, los más armados ayudaron a los demás y las rutas de evacuación se activaron a tiempo. Los mutantes siguen ahí, pero los supervivientes también. Ahora dominan SQL como nadie y han aprendido que los datos, más que las balas, son el arma definitiva.
Mientras el sol asoma sobre un paisaje todavía plagado de ruinas, una última transmisión interfiere la radio de los refugios: un código desconocido que habla de nuevas hordas, más grandes, más rápidas… y de supervivientes que podrían estar organizándose más allá de lo que creíamos posible.
Porque en este apocalipsis, el verdadero final nunca llega. Y cuando vuelva la oscuridad, volveremos con nuevas queries, nuevas estrategias… y la misma sed de seguir vivos.


[…] tienes las soluciones explicadas de los últimos cinco retos. Si estás leyendo esto, es que todavía no te han […]