Controlar cuantos días dentro de dos fechas perteneces a dos listas con SQL Server

publicado por: Anonymous

La problemática es la siguiente:

Debo poder identificar cuantos días dentro de dos fechas determinadas son iguales a las fechas existentes en otra tabla FechasEspeciales pre-cargada, así como también saber si dentro de estas dos fechas se paso por el fin de semana. Y de esto sacar las totalidad de los días.

Por ejemplo si la fecha inicial fuera el martes 07/05/2019 y la final el lunes 13/05/2019 , y suponiendo que dentro de la tabla FechasEspeciales.Fecha tengo los días (08/05/2019 y 10/05/2019), el resultado que debería obtener seria 4 días: 2 por las dos fechas existentes en la tabla y 2 mas por estar el fin de semana entre las fechas establecidas.

Esto lo debo poder realizar con SQL Server, ya que es parte de un procedimiento almacenado que se ejecutará diariamente.

Esta funcionalidad es la que me estaría faltando, no se me ha ocurrido como realizarla de forma eficiente. Gracias por su tiempo desde ya.

solución

Como bien dice @juanchete primero veamos la funcionalidad. Como no conozco la estructura de tus tablas no puedo orientar mucho en ese sentido.

Pero puedes generar una ventana de tiempo y evaluar si cumple con las condiciones que indicas. Te dejo el siguiente ejemplo acumulando variables en una evaluación pasando por un ciclo WHILE

SET NOCOUNT ON 

DECLARE @tmp TABLE ([FechasEspeciales] date)

INSERT INTO @tmp VALUES ('2019-05-08')
INSERT INTO @tmp VALUES ('2019-05-10')

DECLARE @FechaInicio date,
        @FechaFin date,
        @CntDias int

SET @FechaInicio = '2019-05-07'
SET @FechaFin = '2019-05-13'
SET @CntDias = 0

WHILE @FechaInicio <= @FechaFin
BEGIN

    SET @CntDias = @CntDias + IIF(DATEPART(WEEKDAY,@FechaInicio) IN (6,7) OR @FechaInicio IN (SELECT [FechasEspeciales] FROM @tmp),1,0)

    SET @FechaInicio = DATEADD(day,1,@FechaInicio)
END

PRINT @CntDias
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *