Usuário com melhor resposta
Trazer resultado do mês anterior

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.EMPRESALEFT 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
Respostas
-
Deleted
- Marcado como Resposta Guilherme Macedo S sexta-feira, 19 de maio de 2017 19:59
sexta-feira, 12 de maio de 2017 21:54
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
-
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; ...
-
Daniel, e se hoje fosse dia 30/03/2017 ou 31/03/2017?
Assinatura: http://www.imoveisemexposicao.com.br
-
-