none
Query pegando sempre os ultimos 12 meses da data atual RRS feed

  • 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

    sexta-feira, 27 de abril de 2018 13:58

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

    sexta-feira, 27 de abril de 2018 14:09
  • Junior,

    Veja se te ajuda:

    SD2.D2_EMISSAO BETWEEN convert(date, dateadd(MONTH, -12, current_timestamp), 103) AND convert(date, current_timestamp, 103)

    sexta-feira, 27 de abril de 2018 14:54

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

    sexta-feira, 27 de abril de 2018 14:09
  • 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


    sexta-feira, 27 de abril de 2018 14:42
  • Junior,

    Veja se te ajuda:

    SD2.D2_EMISSAO BETWEEN convert(date, dateadd(MONTH, -12, current_timestamp), 103) AND convert(date, current_timestamp, 103)

    sexta-feira, 27 de abril de 2018 14:54
  • Perfeito Felipe deu certinho.

    Obrigado pela ajuda de todos vlw.


    JUNIOR GUERREIRO T.I

    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

    sexta-feira, 27 de abril de 2018 15:00
  • GAPIMEX, nesse caso não seria interessante porque tenho faturamento o dia todo, então preciso manter o relatório atualizado a todo momento que for gerado.

    JUNIOR GUERREIRO T.I

    sexta-feira, 27 de abril de 2018 18:35
  • 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]

    sexta-feira, 4 de maio de 2018 18:01