none
Como obtener cantidad de días dentro de un rango de Fechas en sql? RRS feed

  • Pregunta

  • Hola,

    Hace unos días solicite de su apoyo para obtener la suma de los días en sql, me ayudaron gracias pero olvide que era necesario que fuera en un rango de fechas, lo explico para que me puedan entender y ayudar un poco.

    En un tabla cuento con mi numero de operador la fecha fe Jornada Inicial - Fecha Jornada Final así como Clave de Incidencia, Fecha Inicial de la Incidencia y Fecha Final de la Incidencia.

    Lo que quiero hacer es mediante mi pantalla de C# enviar mi numero de operador y mi Fecha Desde y Fecha Hasta para que en ese rango pueda ir a la tabla y buscar los días que esta laborando restando los días que pudo haber tenido una Incidencia (Falta, Permiso, Otros) y al final obtener solo la cantidad de días laborados.

    (@NumOperador INT, 
    @FechaDesde DATETIME,
    @FechaHasta DATETIME
    )
    AS
    BEGIN    
    SELECT CC.NumOperador,
    (Nombre + ' ' + ApPaterno + ' ' + ApMaterno) AS Operador,
    j.Descripcion,
    (DATEDIFF(DAY, MAX(@FechaDesde), MAX(@FechaHasta)) + 1)-  
    COALESCE(SUM(DATEDIFF(DAY, Fecha_Ini, Fecha_Fin) + 1), 0) AS CantDiasTra
    	
    FROM Operadores O
    JOIN Jornada J ON O.cveJornada = J.cveJornada
    JOIN Calendario CC ON O.NumOperador = CC.NumOperador
    WHERE O.cveTipoOperador = 2 AND O.NumOperador = @NumOperador
    GROUP BY (Nombre + ' ' + ApPaterno + ' ' + ApMaterno), j.Descripcion, cc.NumOperador
    
    END
    GO

    De esta manera si me resta los días de las incidencias, pero me toma en cuenta todas las Incidencias que tiene, desde meses anteriores y solo quiero que reste las incidencias de las fechas marcadas de fecha desde y fecha hasta.

    Espero me puedan apoyar.

    Gracias


    Molitaa

    miércoles, 5 de abril de 2017 14:48

Respuestas

Todas las respuestas

  • Hola molitaa

    Lo obtienes de la siguiente manera

    declare @fechainicial date
    			declare @fechafinal date
    			set @fechainicial = '2017-01-01'
    			set @fechafinal = '2017-04-05'
    			SELECT DATEDIFF(day,@fechainicial ,@fechafinal) as cantidasdias
    Saludos.!


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 5 de abril de 2017 14:57
  • Un poco dificil ayudarte sin saber mucho sobre tu esquema.

    - En cual tabla almacenas las jornadas y en cual las incidencias?

    El calculo debe hacerse por separado, el uno para dias trabajados entre dos fechas y en otro las incidencias. De esta manera tienes el numero de dias entre la fecha inicial y final usadas como parametros y tambien dias por incidencia entre esas dos fechas y dias laborados entre esas dos fechas. 


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    • Marcado como respuesta molitaa miércoles, 5 de abril de 2017 16:07
    miércoles, 5 de abril de 2017 14:58
  • Hola Hunchback

    Las fechas de Jornada e Incidencias están en la misma tabla.

    Ya obtengo los días que son con la fecha desde y fechas hasta pero no logro realizar el de las incidencias que solo me tome en cuenta las incidencias de las fechas marcadas de fecha desde y fecha hasta y no me tome de todos los meses.



    Molitaa

    miércoles, 5 de abril de 2017 15:10
  • Hola Brayan de la Cruz, gracias por tu respuesta, la diferencia de días entre una fecha y otra ya lo he logrado ahora quiero obtener la cantidad de incidencias que hay entre esas fechas pero me trae las de todos los meses. 

    Molitaa

    miércoles, 5 de abril de 2017 15:10
  • Hola Hunchback

    Las fechas de Jornada e Incidencias están en la misma tabla.

    Ya obtengo los días que son con la fecha desde y fechas hasta pero no logro realizar el de las incidencias que solo me tome en cuenta las incidencias de las fechas marcadas de fecha desde y fecha hasta y no me tome de todos los meses.



    Molitaa

    Misma tabla, de ser asi como diferenciamos filas de jornada vs. incidencias?

    Me parece que deberas excluir las filas de incidencias y solo hacer el calculo sobre las de jornada. Crees que puedas postear la estructura de las tablas (solo columnas de interes) y una brebe descripcion de lo que se almancena en cada una de ellas, asi como data de ejemplo en forma de INSERT y resultados esperados?

    El mayor problema que noto es que usas intervalos tanto para jornadas, incidencias y parametros. Esto hace un poquito mas complicado el calculo ya que habria que indagar por intervalos que se solapan y estar seguro que el intervalo de jornada esta incluido dentro del intervalo que buscas de lo contrario habria que calcular inicio o fin desde donde contar.

    Me explico, supongamos que el intervalo a buscar es Ix(dx, hx) y el de jornada es Ty(dy, hy) entonces estos casos necesitarian un procesamiento diferente:

    dx----------------------hx
                   dy--------------------hy

                   dx----------------------hx
    dy--------------------hy

    En el primero el numero de dias de jornada es hx - dy y el segundo hy - dx.

    Quizas sea yo quien lo este complicando pero con la poca informacion que nos das no creo poder ayudarte mas alla de esto.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    miércoles, 5 de abril de 2017 15:25
  • Hola Hunchback

    Las fechas de Jornada e Incidencias están en la misma tabla.

    Ya obtengo los días que son con la fecha desde y fechas hasta pero no logro realizar el de las incidencias que solo me tome en cuenta las incidencias de las fechas marcadas de fecha desde y fecha hasta y no me tome de todos los meses.



    Molitaa

    Misma tabla, de ser asi como diferenciamos filas de jornada vs. incidencias?

    Me parece que deberas excluir las filas de incidencias y solo hacer el calculo sobre las de jornada. Crees que puedas postear la estructura de las tablas (solo columnas de interes) y una brebe descripcion de lo que se almancena en cada una de ellas, asi como data de ejemplo en forma de INSERT y resultados esperados?

    El mayor problema que noto es que usas intervalos tanto para jornadas, incidencias y parametros. Esto hace un poquito mas complicado el calculo ya que habria que indagar por intervalos que se solapan y estar seguro que el intervalo de jornada esta incluido dentro del intervalo que buscas de lo contrario habria que calcular inicio o fin desde donde contar.

    Me explico, supongamos que el intervalo a buscar es Ix(dx, hx) y el de jornada es Ty(dy, hy) entonces estos casos necesitarian un procesamiento diferente:

    dx----------------------hx
                   dy--------------------hy

                   dx----------------------hx
    dy--------------------hy

    En el primero el numero de dias de jornada es hx - dy y el segundo hy - dx.

    Quizas sea yo quien lo este complicando pero con la poca informacion que nos das no creo poder ayudarte mas alla de esto.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas


    Comparto la opinión, es poca la informació, muéstranos más para que podamos ayudarte.


    Si ayudé a resolver tu consulta, no olvides marcar como respuesta y/o votar como útil.

    miércoles, 5 de abril de 2017 16:04
  • Gracias Hunchback,

    Realice lo que me indicaste obtuve las Jornadas, aparte las Incidencias, Reste y me esta funcionando, muchas gracias.

    Saludos.


    Molitaa

    miércoles, 5 de abril de 2017 16:06