none
Trazer resultado do mês anterior RRS feed

  • Pergunta

  • Olá a todos, fiz uma query que posteriormente precisarei colocar em um job, portanto preciso que a @DATA_I e @DATA_F gere de forma automática. O que eu preciso é pegar o primeiro dia do mês anterior e o dia atual -1 só que do mês anterior. Exemplo: Hoje é 12/05, então precisaria pegar de 01/04/2017 a 11/04/2017. 

    O primeiro dia do mês anterior eu já sei como fazer, vou usar (SELECT CONVERT(VARCHAR, DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0),103)). O problema é pegar o mesmo dia atual -1 só que do mês anterior.

    Abaixo está a minha query:

    DECLARE @DATA_I DATE  = '01-04-2017'
    DECLARE @DATA_F DATE = '11-04-2017'
                  
    SELECT SUM ( A.VENDA_BRUTA )                                                                 AS VENDA_BRUTA         , 
                 SUM ( A.DESCONTO )                                                                        AS DESCONTO            , 
                 SUM ( A.VENDA_LIQUIDA )                                                               AS VENDA_LIQUIDA       , 
                 SUM ( A.IMPOSTOS )                                                                          AS IMPOSTOS            ,
                 SUM ( A.QUANTIDADE * ISNULL ( B.CUSTO_CONTABIL , 0 ) )    AS CMV                 , 
                 SUM ( CASE WHEN A.TIPO_BONIFICACAO = 'V' 
                         THEN A.QUANTIDADE * A.BONIFICACAO
                         ELSE A.VENDA_LIQUIDA * ( A.BONIFICACAO / 100 ) END ) AS BONIFICACAO         , 
                 SUM ( CASE WHEN A.TIPO_COMISSAO = 'V' 
                         THEN A.QUANTIDADE * A.COMISSAO
                         ELSE A.VENDA_LIQUIDA * ( A.COMISSAO / 100 ) END )       AS COMISSAO            ,
              SUM ( A.VENDA_LIQUIDA ) - 
              SUM ( A.IMPOSTOS ) - 
              SUM ( A.QUANTIDADE * ISNULL ( B.CUSTO_CONTABIL , 0 ) )        AS LUCRO_BRUTO 


            FROM VENDAS_ANALITICAS                                              A WITH(NOLOCK)
              JOIN EMPRESAS_USUARIAS                                            X WITH(NOLOCK) ON X.EMPRESA_USUARIA   = A.EMPRESA

    LEFT JOIN CUSTO_MEDIO_MENSAL_EMPRESA_CONTABIL B WITH(NOLOCK) ON B.PRODUTO   = A.PRODUTO 
    AND B.EMPRESA_CONTABIL = X.EMPRESA_CONTABIL 
    AND B.MES = MONTH ( A.MOVIMENTO ) 
    AND B.ANO = YEAR  ( A.MOVIMENTO ) 
        WHERE A.MOVIMENTO >= @DATA_I AND 
              A.MOVIMENTO       <= @DATA_F AND
              X.REDE                    = 1

    sexta-feira, 12 de maio de 2017 17:35

Respostas

Todas as Respostas

  • Boa tarde,

    Daniel, experimente a princípio dessa forma:

    DECLARE @DATA_F DATE = DATEADD(MONTH, -1, DATEADD(DAY, -1, GETDATE()));

    Mas e se hoje for o primeiro dia do mes? Como devem ficar as datas?



    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 12 de maio de 2017 17:48
  • preciso que a @DATA_I e @DATA_F gere de forma automática. O que eu preciso é pegar o primeiro dia do mês anterior e o dia atual -1 só que do mês anterior.

    ...
    set @DATA_I= dateadd(month, (datediff(month, 0, current_timestamp) -1), 0);
    set @DATA_F= dateadd(day, (case when day(current_timestamp) > 1 then (day(current_timestamp) -2) else 0 end), @DATA_I);
    ...

     

    ou

    ...
    set @DATA_I= dateadd(month, (datediff(month, 0, current_timestamp) -1), 0);
    IF day(current_timestamp) > 1
      set @DATA_F= dateadd(day, (day(current_timestamp) -2), @DATA_I)
    else
      set @DATA_F = @DATA_I;
    ...
    Obrigado, funcionou certinho. Porém quando for o primeiro dia do mês o @DATA_F como ficaria? Somente nessa situação ele deveria ficar igual o @DATA_I. 
    sexta-feira, 12 de maio de 2017 19:29
  • Daniel, e se hoje fosse dia 30/03/2017 ou 31/03/2017?

    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 12 de maio de 2017 19:46
  • O código #3 já resolve o problema do dia 30/03 ou 31/03. Obrigado amigo pela ajuda. 
    domingo, 14 de maio de 2017 23:23
  • Sim, muito obrigado. 
    segunda-feira, 15 de maio de 2017 14:02