none
SELECT COM GROUP BY PEGANDO ULTIMA DATA DA MESMA TABELA RRS feed

  • Pergunta

  • Bom Dia Pessoal

    Estou com um problema de desempenho na Query, tenho uma query que fiz q já esta rodando a 2 dias sem sucesso.

    Preciso fazer um group by de uma tabela de Vendas agrupando por MES/ANO | PRODUTO | TOTAL

    Mas o cliente deseja saber a data de ultima venda de cada produto em cada mes. Entao fiz a consulta abaixo. 

    Veja exemplo:

    TABELA VENDAS

    DATA  PRODUTO TOTAL
    20180201  A 100
    20180202  B 100
    20180203  C 100
    20180204  A 100
    20180205  B 100
    20180206  B 100
    20180207  A 100
    20180208  C 100
    20180209  A 100
    20180210  A 100
    20180211  B 100
    20180212  B 100
    20180213  C 100
    20180214  A 100
    20180215  B 100
    20180301  A 100
    20180302  B 100
    20180303  C 100
    20180304  A 100
    20180305  B 100
    20180306  B 100
    20180307  A 100

    RESULTADO DA QUERY

    ANO MÊS PRODUTO ULT_VENDA TOTAL
    201802  A 20180214 600
    201802  B 20180215 600
    201802  C 20180213 300
    201803  A 20180307 300
    201803  B 20180306 300
    201803  C 20180303 100

    QUERY QUE FIZ MAS ESTA MUITO DEMORADA, JÁ QUE A TABELA VENDAS TEM MAIS DE 2 MILHOES DE REGISTROS

    SELECT X.ANOMES, X.PRODUTO, X.TOTAL, 
    ISNULL(SELECT TOP 1 B.DATA FROM VENDAS B 
    WHERE 
    SUBSTRING(B.DATA,1,6) = X.ANOMES 
    AND B.PRODUTO = X.PRODUTO ORDER BY B.DATA DESC,'') ULT_VENDA
    (
    SELECT 
    SUBSTRING(A.DATA,1,6) ANOMES,
    A.PRODUTO PRODUTO,
    SUM(A.TOTAL) TOTAL
    FROM
    VENDAS A
    GROUP BY 
    SUBSTRING(A.DATA,1,6),
    A.PRODUTO
    ) X

    DESDE JÁ AGRADECO A TODOS

    GUILHERME

    segunda-feira, 2 de julho de 2018 13:11

Respostas

  • Bom dia,

    Acho que é possível obter a data da última venda no mes com a função Max:

    SELECT 
        SUBSTRING(A.DATA,1,6) ANOMES,
        A.PRODUTO PRODUTO,
        MAX(A.DATA) ULT_VENDA,
        SUM(A.TOTAL) TOTAL
    FROM VENDAS A
    GROUP BY 
        SUBSTRING(A.DATA,1,6),
        A.PRODUTO

    Espero que ajude


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

    • Marcado como Resposta Alemaum5062 segunda-feira, 2 de julho de 2018 13:38
    segunda-feira, 2 de julho de 2018 13:22

Todas as Respostas

  • Bom dia,

    Acho que é possível obter a data da última venda no mes com a função Max:

    SELECT 
        SUBSTRING(A.DATA,1,6) ANOMES,
        A.PRODUTO PRODUTO,
        MAX(A.DATA) ULT_VENDA,
        SUM(A.TOTAL) TOTAL
    FROM VENDAS A
    GROUP BY 
        SUBSTRING(A.DATA,1,6),
        A.PRODUTO

    Espero que ajude


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

    • Marcado como Resposta Alemaum5062 segunda-feira, 2 de julho de 2018 13:38
    segunda-feira, 2 de julho de 2018 13:22
  • Bom Dia gapimex

    Mas ai ele vai trazer sempre a ultima data de todos os registros. Preciso da ultima data de cada mes e cada produto

    Mas obrigado pela ajuda

    segunda-feira, 2 de julho de 2018 13:33
  • Desculpe Gapimex

    FUNCIONOU PERFEITAMENTE, eu que estava fazendo errado.

    Muito obrigado pela ajuda

    segunda-feira, 2 de julho de 2018 13:38