¿Cómo calculo fechas de vigencia sin terminar con rangos solapados o huecos?
Cuaderno N°04 · Serie «Trucos de T-SQL para tu DW»
Por Javier Loria · Lectura ~11 min · SQL Server · Window Functions · Data Warehouse
Los precios, las tasas de cambio, los salarios mínimos: todos cambian con el tiempo, y cada versión rige desde una fecha hasta la siguiente. Modelar esas fechas de vigencia con una fecha de inicio y una de fin es lo común — y lo que más se rompe: tarde o temprano alguien carga la versión nueva y olvida cerrar la anterior, y quedan dos vigencias solapadas, o un hueco entre fechas. El error no avisa; aparece meses después, en una auditoría que no cuadra.
Este cuaderno muestra cómo calcular la vigencia (la fecha de fin) en vez de almacenarla, usando la función LEAD para derivar el fin desde el inicio de la versión siguiente. Una sola fecha que mantener, cero desincronización.
Qué vas a encontrar:
- Por qué guardar VigenciaHasta a mano se desincroniza o se vuelve carísimo.
- El truco: la siguiente fila es una función (LEAD), no un self-join.
- Cómo manejar la vigencia abierta que no tiene «siguiente».
- La trampa del «-1 día» cuando las fechas tienen hora.
- Por qué sin PARTITION BY una categoría cierra los precios de otra.
- LAG: la misma ventana, mirando hacia atrás.
