Usuário com melhor resposta
Query pegando sempre os ultimos 12 meses da data atual

Pergunta
-
Bom dia.
Tenho uma query que preciso que pegue sempre os últimos 12 meses com base na data atual, como posso fazer isso?
Desde já agradeço.
Segue a query
SELECT
SB1.B1_COD,
SB1.B1_DESC,
SB1.B1_UM,
SB1.B1_EMIN AS MINIMO ,
SUM(SB2.B2_QATU) AS SALDO,
SUM(SD2.D2_QUANT) / 12 AS MEDIA
FROM SB1020 AS SB1
INNER JOIN SB2020 AS SB2 WITH(NOLOCK) ON SB2.B2_COD = SB1.B1_COD
INNER JOIN SD2020 AS SD2 WITH(NOLOCK) ON SD2.D2_COD = SB1.B1_COD
WHERE SB1.B1_MSBLQL = '2' AND SB2.B2_LOCAL IN ('01', '98', '99') AND SB1.B1_TIPO = 'PA'
AND SB1.D_E_L_E_T_ <> '*' AND SB2.D_E_L_E_T_ <> '*'
GROUP BY SB1.B1_COD, SB1.B1_DESC, SB1.B1_EMIN, SB1.B1_UM
HAVING SB1.B1_EMIN >= SUM(SB2.B2_QATU)
ORDER BY SB1.B1_DESC
JUNIOR GUERREIRO T.I
Respostas
-
Bom dia,
Junior, supondo que exista uma coluna com a data (ou data e hora) experimente adicionar um filtro na clausula Where mais ou menos dessa forma:
AND ColunaData >= dateadd(month, datediff(month, 0, current_timestamp) - 11, 0) AND ColunaData < dateadd(month, datediff(month, 0, current_timestamp) + 1, 0)
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Junior Guerreiro sexta-feira, 27 de abril de 2018 14:58
-
Junior,
Veja se te ajuda:
SD2.D2_EMISSAO BETWEEN convert(date, dateadd(MONTH, -12, current_timestamp), 103) AND convert(date, current_timestamp, 103)
- Marcado como Resposta Junior Guerreiro sexta-feira, 27 de abril de 2018 14:58
Todas as Respostas
-
Bom dia,
Junior, supondo que exista uma coluna com a data (ou data e hora) experimente adicionar um filtro na clausula Where mais ou menos dessa forma:
AND ColunaData >= dateadd(month, datediff(month, 0, current_timestamp) - 11, 0) AND ColunaData < dateadd(month, datediff(month, 0, current_timestamp) + 1, 0)
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Junior Guerreiro sexta-feira, 27 de abril de 2018 14:58
-
obrigado pela ajuda, mas esta dando diferença no calculo quando coloco sua opção acima na minha query como mostro abaixo, estou fazendo uma comparação com sua solução e também digitando a data no intervalo de 12 meses.
Como mostro na imagem em anexo. Tenho uma diferença no total de vendas.
JUNIOR GUERREIRO T.I
- Editado Junior Guerreiro sexta-feira, 27 de abril de 2018 14:43
-
Junior,
Veja se te ajuda:
SD2.D2_EMISSAO BETWEEN convert(date, dateadd(MONTH, -12, current_timestamp), 103) AND convert(date, current_timestamp, 103)
- Marcado como Resposta Junior Guerreiro sexta-feira, 27 de abril de 2018 14:58
-
-
Junior, a coluna SD2.D2_EMISSAO armazena somente a data ou a data e a hora?
Achei que você queria os meses completos. Pelo que você postou, não seria melhor desconsiderar o dia atual ficando de 27/04/2017 a 26/04/2017?
Assinatura: http://www.imoveisemexposicao.com.br
-
-
Junior,
Mas neste caso, não seria melhor então utilizar uma tabela temporária ou auxiliar para armazenar estes dados processados ao longo do tempo?
Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]