A menudo nos encontramos
con que tenemos una entidad que tiene fecha de inicio y fecha fin.
Ej: Fechas de inicio y fin
de una póliza de seguros, Fecha de alta y Baja de un abonado, Fecha de creación
y desaparición de una empresa… etc
Y nos surge la necesidad
de ver si esa entidad estaba activa en un año o mes determinado. Se puede hacer
creando expresiones con set analysis que comprueben ambas fechas, pero la forma
más cómoda es calculando todas las fechas en el script.
Para ello creamos una
tabla auxiliar que contenga las fechas de vigencia de la entidad en cuestión.
Vamos a ver el ejemplo de
fechas de vigencia de Pólizas donde existe una tabla POLIZAS con los campos %POLIZA
como clave única, F_ALTA_POLIZA como Fecha de inicio y F_BAJA_POLIZA como fecha de fin.
TMP1:
LOAD
DISTINCT
%POLIZA,
F_ALTA_POLIZA AS FechaInicio,
RANGEMIN(F_BAJA_POLIZA,TODAY()) AS FechaFin //Si no tiene fecha de baja, las limitamos a hoy o al fecha
que queramos.
RESIDENT
POLIZAS;
FECHAS_VIGENCIA_POLIZA:
LOAD
%POLIZA,
Year(AddMonths(FechaInicio, IterNo() - 1)) AS
AÑO_VIG_POLIZA,
Month(AddMonths(FechaInicio, IterNo() - 1)) AS
MES_VIG_POLIZA,
DUAL(Month(AddMonths(FechaInicio, IterNo() - 1))&'-'&Year(AddMonths(FechaInicio, IterNo() - 1))
,
Year(AddMonths(FechaInicio, IterNo() - 1)) * 100 + Month(AddMonths(FechaInicio, IterNo() - 1))) AS
AÑOMES_VIG_POLIZA
Resident TMP1
While Num(Year(AddMonths(FechaInicio,
IterNo() - 1)) * 100 +
Month(AddMonths(FechaInicio,
IterNo() - 1))) <=
Num(Year(FechaFin)
* 100 + Month(FechaFin))
;
DROP Table TMP1;
Usamos
la función DUAL para obtener el AÑOMES_VIG_POLIZA en los formatos
Ene-2018
(texto) y 201801 (número). De esta forma en un selector podemos usar la
representación de Texto, más amigable para el usuario, y en una expresión
podemos usar el formato numérico.
No hay comentarios:
Publicar un comentario