none
FILTRAR EN UNA FECHA SOLO EL MES Y EL AÑO RRS feed

  • Pregunta

  • 


    TENGO 66 REGISTROS QUE FILTRO CON UNA CONSULTA SIMPLE:

    select * from Activos a inner join Vida_Util v
    on a.Id_VidaU = v.Id_VidaU
    inner join Tipo_Activos t
    on t.Id_TipoAct = v.Id_TipoActivo
    where t.Id_TipoAct = 2 and IdEstado = 1 and IdLocalidad = 3

    NECESITO FILTRAR ESTOS REGISTROS POR MES Y AÑO INDICÁNDOLE QUE NO ME MUESTRE DATOS CON EL MES Y AÑO EN CURSO SIN IMPORTAR EL DIA QUE PODRÍA HACER?

    domingo, 30 de septiembre de 2018 5:21

Respuestas

  • El código dice:

    y

    ( /* importante este paréntesis */

    año de fecha_Depreciable <> 2018 

    and

    mes de fecha_deprecialbe <> 9

    ) /* fin de la consulta */

    ¿No es eso lo que quieres?

    Intellisense me dice que eso es un bloque.

    domingo, 30 de septiembre de 2018 6:45
  • Hola Jlyn27:

    Si por lo que te entiendo, quieres filtrar además de lo que ya tienes, exceptuando los registros que encajen con el mes en curso para el año en curso.

    and
    (DATEPART(year,fecha_Depreciable)<>YEAR(getdatE())
    and
    DATEPART (MONTH,Fecha_Depreciable)<>(MONTH(getdate())))

    le anexas esto a la consulta.

    DatePart extrae una parte de un dato.

    Year devuelve el año de una fecha

    Month devuelve el mes de una fecha

    Getdate() devuelve la fecha actual.

    Espero sea lo que buscas


    domingo, 30 de septiembre de 2018 6:24
  • le encontré solución muchas gracias por su ayuda.

    select * from Activos a inner join Vida_Util v
    on a.Id_VidaU	= v.Id_VidaU
    inner join Tipo_Activos t
    on t.Id_TipoAct = v.Id_TipoActivo
    where t.Id_TipoAct = 2 and IdEstado = 1 and IdLocalidad = 3 and 
    DATEADD(M,+1, a.Fecha_Depreciable) < GETDATE()


    domingo, 30 de septiembre de 2018 7:34

Todas las respuestas

  • Hola Jlyn27:

    Si por lo que te entiendo, quieres filtrar además de lo que ya tienes, exceptuando los registros que encajen con el mes en curso para el año en curso.

    and
    (DATEPART(year,fecha_Depreciable)<>YEAR(getdatE())
    and
    DATEPART (MONTH,Fecha_Depreciable)<>(MONTH(getdate())))

    le anexas esto a la consulta.

    DatePart extrae una parte de un dato.

    Year devuelve el año de una fecha

    Month devuelve el mes de una fecha

    Getdate() devuelve la fecha actual.

    Espero sea lo que buscas


    domingo, 30 de septiembre de 2018 6:24
  • el detalle es que si coloco así no me mostrara todos los registros de 'X' mes y todos los registros de 'X' año

    domingo, 30 de septiembre de 2018 6:38
  • de todo modos muchas gracias 

    si tienes otra idea te lo agradeciese mucho

    domingo, 30 de septiembre de 2018 6:39
  • El código dice:

    y

    ( /* importante este paréntesis */

    año de fecha_Depreciable <> 2018 

    and

    mes de fecha_deprecialbe <> 9

    ) /* fin de la consulta */

    ¿No es eso lo que quieres?

    Intellisense me dice que eso es un bloque.

    domingo, 30 de septiembre de 2018 6:45
  • creo que formule mal la pregunta lo siento.

    supongo que lo que en realidad deseo filtrar son todo lo registros excepto los del mes y año en curso 

    y no todo los registros de septiembre y 2018

    domingo, 30 de septiembre de 2018 6:59
  • le encontré solución muchas gracias por su ayuda.

    select * from Activos a inner join Vida_Util v
    on a.Id_VidaU	= v.Id_VidaU
    inner join Tipo_Activos t
    on t.Id_TipoAct = v.Id_TipoActivo
    where t.Id_TipoAct = 2 and IdEstado = 1 and IdLocalidad = 3 and 
    DATEADD(M,+1, a.Fecha_Depreciable) < GETDATE()


    domingo, 30 de septiembre de 2018 7:34
  • Toma la fecha en curso y calcula el inicio y fin de mes para filtar en el query aquellos cuya fecha sea menor al inicio del mes corriente o mayor al fin de mes corriente.

    DECLARE @dt date = CURRENT_TIMESTAMP;
    
    SELECT
        @dt AS fecha_hoy,
        DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @dt), '19000101') AS inicio_mes_corriente,
    	DATEADD(MONTH, DATEDIFF(MONTH, '18991231', @dt), '18991231') AS fin_mes_corriente,
    	EOMONTH(@dt) AS fin_mes_corriente_2;
    GO

    Dado el calculo anterior, solo debes aniadir a tu query lo sgte:

    DECLARE @dt date = CURRENT_TIMESTAMP;
    
    select 
    	* 
    FROM 
    	Activos a 
    	
    	INNER JOIN
    	Vida_Util v
    	ON a.Id_VidaU = v.Id_VidaU
    	
    	INNER join 
    	Tipo_Activos t
    	ON t.Id_TipoAct = v.Id_TipoActivo
    WHERE
    	t.Id_TipoAct = 2 
    	AND IdEstado = 1 
    	AND IdLocalidad = 3
    	AND (
    	fecha < DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @dt), '19000101')
    	OR
        fecha > DATEADD(MONTH, DATEDIFF(MONTH, '18991231', @dt), '18991231')
    	)
    OPTION (RECOMPILE);
    

    Manipular columnas en la clausula JOIN, WHERE o HAVING (ejemplo: dateadd(month, 1, fecha)) no es buena practica ypueden para al optimizador de usar indices existinetes por esas columnas.


    AMB

    Some guidelines for posting questions...

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

    lunes, 1 de octubre de 2018 16:50