lunes, 24 de agosto de 2009

NetWorkDays

Me tomo la licencia de enlazar esta entrada en la que Sertaz hace una muy buena apreciación de la funcion

He tenido ultimamente que implantarla en una serie de expresiones y me he encontrado con el problema siguiente a modo de ejemplo:
Durante el mes de Enero realizo 3 alquileres de maquinaria los dias 12, 24 y 26. Calculo para esto la siguiente funcion->networkdays(min(Fecha),max(fecha)) mas o menos asi y el resultado son los dias laborables desde el 12 al 26 que por supuesto no es correcto.
La solución que he encontrado a esto es cargar una tabla con la primera y ultima fecha de cada mes usando un calendario, en lo que queda algo asi y asociado al campo fecha.

Fechas:
LOAD
Fecha,
Month(Fecha),
Primer_Dia_Mes,
Ultimo_Dia_Mes,
Year(Fecha);
SQL SELECT Fecha,CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(Fecha)-1),Fecha),103) AS Primer_Dia_Mes, CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,Fecha))),DATEADD(mm,1,Fecha)),103) as Ultimo_Dia_Mes
FROM GBCC_Calendario_Ocupacion_Carga

Para cargar el primer dia y el ultimo del mes, me he fabricado esta consulta...
SELECT Fecha,CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(Fecha)-1),Fecha),103) AS Primer_Dia_Mes,
CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,Fecha))),DATEADD(mm,1,Fecha)),103) as Ultimo_Dia_Mes
FROM GBCC_Calendario_Ocupacion_Carga



El resultado final para que os hagais una idea de lo que queria obtener...