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
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...