Usuário com melhor resposta
Média Com data diferente

Pergunta
-
Tenho uma consulta SQL que me traz o valor das vendas por vendedor no intervalo de 6 meses, porém quero pegar a média de vendas dos 5 meses anteriores.
Tem como subtrair um mês com AVG ?
DECLARE @DATA AS SMALLDATETIME, @DATA2 AS SMALLDATETIME
SET @DATA = '2019-01-01'
SET @DATA2 = ''2019-06-30''
SELECTVENDEDOR , SUM(VALORVENDAS)FROM VENDAS
WHERE DATAVENDAS BETWEEN @DATA AND @DATA2
Mas preciso da media de vendas de
01/01/2019 até
30/05/2019
Respostas
-
Deleted
- Marcado como Resposta William_droops segunda-feira, 24 de junho de 2019 13:21
Todas as Respostas
-
Boa tarde,
Não sei se entendi corretamente mas segue uma sugestão para testes:
DECLARE @DATA AS DATE, @DATA2 AS DATE, @DATAINIMEDIA AS DATE SET @DATA = '2019-01-01' SET @DATA2 = '2019-06-30' SET @DATAINIMEDIA = DATEADD(MONTH, 1, @DATA) SELECT VENDEDOR, SUM(VALORVENDAS) AS SOMA, AVG(CASE WHEN DATAVENDAS BETWEEN @DATAINIMEIDA AND @DATA2 THEN VALORVENDAS END) AS MEDIA FROM VENDAS WHERE DATAVENDAS BETWEEN @DATA AND @DATA2
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP quarta-feira, 19 de junho de 2019 18:12
-
A ideia é mais ou menos essa, você adicionou um Mês na data inicial, no meu caso preciso tirar um Mês da data final, porém não esta batendo as médias.
Mas os valores não bate, mesmo usando só o AVG, já não bate, olha a Query completa.
DECLARE @DATA AS SMALLDATETIME, @DATA2 AS SMALLDATETIME, @DATA3 AS SMALLDATETIME SET @DATA = '2019-01-01' SET @DATA2 = '2019-06-30' SET @DATA3 = DATEADD(MONTH,-1, @DATA2) SELECT VENDEDOR SUM(VALORVENDAS) AS VENDAS REPLACE(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,DATAVENDAS) = 01 AND DATEPART(YEAR,DATAVENDAS) = 2019 THEN VALORVENDAS END)),'.',',') as '01/2019' ,REPLACE(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,DATAVENDAS) = 02 AND DATEPART(YEAR,DATAVENDAS) = 2019 THEN VALORVENDAS END)),'.',',') as '02/2019' ,REPLACE(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,DATAVENDAS) = 03 AND DATEPART(YEAR,DATAVENDAS) = 2019 THEN VALORVENDAS END)),'.',',') as '03/2019' ,REPLACE(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,DATAVENDAS) = 04 AND DATEPART(YEAR,DATAVENDAS) = 2019 THEN VALORVENDAS END)),'.',',') as '04/2019' ,REPLACE(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,DATAVENDAS) = 05 AND DATEPART(YEAR,DATAVENDAS) = 2019 THEN VALORVENDAS END)),'.',',') as '05/2019' ,REPLACE(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,DATAVENDAS) = 06 AND DATEPART(YEAR,DATAVENDAS) = 2019 THEN VALORVENDAS END)),'.',',') as '06/2019' ,AVG(CASE WHEN DATAVENDAS BETWEEN @DATA AND @DATA3 THEN VALORVENDAS END )AS MEDIA2
- Editado William_droops quarta-feira, 19 de junho de 2019 18:49
-
Que média você quer obter? Por venda? Por mês? Ou outro tipo de média?
Da forma como foi sugerido você deve estar obtendo a média de por venda.
Assinatura: http://www.imoveisemexposicao.com.br
-
-
-
William, você quer obter a média mensal dos período? Se for experimente dessa forma:
SET @DATA3 = DATEADD(MONTH, 5, @DATA) SELECT VENDEDOR, SUM(VALORVENDAS) AS SOMA, sum(CASE WHEN DATAVENDAS < @DATA3 THEN VALORVENDAS END) / 5 AS MEDIA FROM VENDAS WHERE DATAVENDAS BETWEEN @DATA AND @DATA2
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
-
-
O resultado foi este para o código #1
VENDEDOR1 | 3924,34 |2688,66 | 956,55 | 2214,05| 0,00 | 9783,60 | 1087.066666 |1087.066666 Onde as colunas são Vendedor | 02/2019 | 03/2019 | 04/2019 | 05/2019 | 06/2019 | somadasvendas | media geral | media menos 1 mes
-
-
Willian, segue uma sugestão para testes:
SET @DATA3 = DATEADD(DAY, 1 - DATEPART(DAY, @DATA2), @DATA2) SELECT VENDEDOR, SUM(VALORVENDAS) AS SOMA, sum(CASE WHEN DATAVENDAS < @DATA3 THEN VALORVENDAS END) / DATEDIFF(MONTH, @DATA, @DATA3) AS MEDIA FROM VENDAS WHERE DATAVENDAS BETWEEN @DATA AND @DATA2
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Olá Jose Diz; a construção das datas é dinâmica conforme preencho data inicial e data final no Form.
A coluna DATAVENDAS é do tipo Smalldatetime.
O código correto sem colocar nomes bonitos é este.DECLARE @DATA AS SMALLDATETIME, @DATA2 AS SMALLDATETIME, @DATA3 AS SMALLDATETIME SET @DATA = '2019-02-01' SET @DATA2 = '2019-06-30' SET @DATA3 = DATEADD(MONTH,-1,DATEADD(day,+1, @DATA2)) SELECT RTRIM(A03.A03_001_C) AS 'CLIENTE' ,REPLACE(ISNULL(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,J07.J07_006_D) = 02 AND DATEPART(YEAR,J07.J07_006_D) = 2019 THEN J08_008_B END)),0),'.',',') as '02/2019' ,REPLACE(ISNULL(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,J07.J07_006_D) = 03 AND DATEPART(YEAR,J07.J07_006_D) = 2019 THEN J08_008_B END)),0),'.',',') as '03/2019' ,REPLACE(ISNULL(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,J07.J07_006_D) = 04 AND DATEPART(YEAR,J07.J07_006_D) = 2019 THEN J08_008_B END)),0),'.',',') as '04/2019' ,REPLACE(ISNULL(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,J07.J07_006_D) = 05 AND DATEPART(YEAR,J07.J07_006_D) = 2019 THEN J08_008_B END)),0),'.',',') as '05/2019' ,REPLACE(ISNULL(CONVERT(DECIMAL (10,2), SUM(CASE WHEN DATEPART(MONTH,J07.J07_006_D) = 06 AND DATEPART(YEAR,J07.J07_006_D) = 2019 THEN J08_008_B END)),0),'.',',') as '06/2019' ,REPLACE(ISNULL(SUM(CONVERT(DECIMAL(10,2), J08_008_B)),0),'.',',') AS 'VALOR OVS' ,AVG(J08_008_B) AS MEDIAGERAL ,AVG(CASE WHEN J07.J07_006_D < @DATA3 THEN J08_008_B END )AS MEDIAMENOS1MES FROM DBO.A33 (NOLOCK) LEFT JOIN DBO.J07 (NOLOCK) ON DBO.A33.UKEY = DBO.J07.A33_UKEY LEFT JOIN DBO.J08 (NOLOCK) ON J07.UKEY = J08.J07_UKEY AND J08.J08_995_B > 0 LEFT JOIN DBO.A54 (NOLOCK) ON LEFT(J07.A36_CODE,5) = A54.A36_UKEY LEFT JOIN DBO.A03 (NOLOCK) ON A03.UKEY = J07.A03_UKEY AND A03.CIA_UKEY = J07.CIA_UKEY WHERE A33_066_N <> 1 AND J07.J07_006_D BETWEEN @DATA AND @DATA2 AND J08.J08_995_B > 0 AND (J08.J08_921_C <> 3) AND (J08.J08_921_C <> 2) and A03.A03_001_C = 'CL.PG.0095' GROUP BY A03.A03_001_C, A03.A03_003_C
-
Deleted
- Marcado como Resposta William_droops segunda-feira, 24 de junho de 2019 13:21
-
Olá José Diz
O valor média dever ser o 2, com esta solução cheguei ao que desejava.
obrigado
,sum (J08_008_B) / (datediff (month, @DATA, @DATA3) +1) as MEDIAGERAL ,sum (CASE WHEN J07.J07_006_D < @DATA3 THEN J08_008_B END) / datediff (month, @DATA, @DATA3) as MEDIAMENOS1MES
- Sugerido como Resposta Junior Galvão - MVPMVP segunda-feira, 24 de junho de 2019 16:31