11 Replies Latest reply: Apr 30, 2012 3:24 PM by pericles silva RSS

    Pegando as últimas vendas de cada vendedor em uma tabela

    pericles silva

                  Em uma tabela de vendas, eu quero pegar apenas a última venda de cada vendedor (ordem:data e hora mais recente). Ex:

       

      Tabela Origem:

       

      Vendedor

       

      Data

       

      Hora

       

      Produto

       

      Péricles

       

      10/04/2012

       

      12:00

       

      Webcam

       

      Marcelo

       

      11/04/2012

       

      13:00

       

      Celular

       

      Paulo

       

      12/04/2012

       

      14:00

       

      Pen Drive

       

      Paulo

       

      25/04/2012

       

      16:00

       

      Webcam

       

      Péricles

       

      13/04/2012

       

      09:00

       

      Webcam

       

      Péricles

       

      14/04/2012

       

      11:00

       

      Celular

       

      Péricles

       

      25/04/2012

       

      14:00

       

      Pen Drive

       

      Marcelo

       

      25/04/2012

       

      15:00

       

      Celular

       

      Marcelo

       

      12/04/2012

       

      17:00

       

      Webcam

       

       

       

      Tabela Resultante:

       

      Vendedor

       

      Data

       

      Hora

       

      Produto

       

      Péricles

       

      25/04/2012

       

      14:00

       

      Pen Drive

       

      Marcelo

       

      25/04/2012

       

      15:00

       

      Celular

       

      Paulo

       

      25/04/2012

       

      16:00

       

      Webcam

       

       

       

       

      Script Tabela Origem:

      VENDAS:

      LOAD * INLINE [

          Vendedor, Data, Hora, Produto

          Péricles, 10/04/2012, 12:00, Webcam

          Marcelo, 11/04/2012, 13:00, Celular

          Paulo, 12/04/2012, 14:00, Pen Drive

          Paulo, 25/04/2012, 16:00, Webcam

          Péricles, 13/04/2012, 09:00, Webcam

          Péricles, 14/04/2012, 11:00, Celular

          Péricles, 25/04/2012, 14:00, Pen Drive

          Marcelo, 25/04/2012, 15:00, Celular

          Marcelo, 12/04/2012, 17:00, Webcam

      ];

        • Pegando as últimas vendas de cada vendedor em uma tabela
          Cesar Accardi

          Olá Péricles,

           

          Você pode fazer o seguinte:

           

          Carregue a tabela fazendo uma agregação com a função max para a maior (última) data, fica assim:

           

          LOAD

          Vendedor,
          Produto,
          max(Data)
          INLINE[...]
          GROUP BY Vendedor, Produto;


          Se ocorrerem vendas na mesma data você teria que incluir a hora no campo Data antes de realizar o "max", acredito que você possa fazer isso com uma simples concatenação dos campos Data e Hora com um espaço separador...

           

          Espero ter ajudado, abraços.
          Cesar

          • Pegando as últimas vendas de cada vendedor em uma tabela
            Aderlan Rodrigues

            Olá Pericles, tenta esse o script abaixo.

             

            Com o Group By você diz qual campo será o agrupador e a função MaxString, pega o maior valor encontrado na coluna correspondente, se você quiser saber qual o último dia e hora, tem que fazer esse campo se um só, assim o MaxString vai reotornar o maior dia/hora correspondente, um pouco diferente do que acontece com esse script, não sei se é exatamente isso que você está tentando fazer.

             

            Abraço.

             

            Script Tabela Origem:

            VENDAS:

            LOAD Vendedor,

                 MaxString(Data) as Data,

                 MaxString(Hora) as Hora,

                 MaxString(Produto) as Produto

            INLINE [

                Vendedor, Data, Hora, Produto

                Péricles, 10/04/2012, 12:00, Webcam

                Marcelo, 11/04/2012, 13:00, Celular

                Paulo, 12/04/2012, 14:00, Pen Drive

                Paulo, 25/04/2012, 16:00, Webcam

                Péricles, 13/04/2012, 09:00, Webcam

                Péricles, 14/04/2012, 11:00, Celular

                Péricles, 25/04/2012, 14:00, Pen Drive

                Marcelo, 25/04/2012, 15:00, Celular

                Marcelo, 12/04/2012, 17:00, Webcam

            ] Group By Vendedor;

              • Pegando as últimas vendas de cada vendedor em uma tabela
                pericles silva

                Aderlan, seu script funcionou perfeitamente, mas só com um problema: Como o campo Produto está com MaxString, ele retorna sempre a Webcam, pois é o maior caracter dentre os outros. Mas o certo era retornar o produto correspondente a linha. Tem alguma ideia?

                 

                Cesar, muito obrigado mas não deu a tabela resultante. Concatenei os valores de Data e Hora no mesmo campo, formando um único campo, mas mesmo assim não deu a tabela resultante. Mas valeu ae.

                  • Pegando as últimas vendas de cada vendedor em uma tabela
                    rodrigo silvestre

                    tente tirar o maxstring do produto.

                     

                    deixe apenas na data e hora

                      • Pegando as últimas vendas de cada vendedor em uma tabela
                        pericles silva

                        Rodrigo, ai que é o problema. Se eu tirar o Maxstring(Produto) as Produto e deixar apenas Produto, isto quer dizer que eu obrigatoriamente terei que agrupar também o campo Produto (GROUP BY Vendedor, Produto) e isso não pode ser feito, pois aparecerão vendas de outras datas (exatamente o que aconteceu no Script do Cesar mais acima).

                         

                        Não sei se você testou mas veja o erro de lógica que acontece:

                         

                        VENDAS:

                        LOAD Vendedor,

                             MaxString(Data) as Data,

                             MaxString(Hora) as Hora,

                             Produto

                        INLINE [

                            Vendedor, Data, Hora, Produto

                            Péricles, 10/04/2012, 12:00, Webcam

                            Marcelo, 11/04/2012, 13:00, Celular

                            Paulo, 12/04/2012, 14:00, Pen Drive

                            Paulo, 25/04/2012, 16:00, Webcam

                            Péricles, 13/04/2012, 09:00, Webcam

                            Péricles, 14/04/2012, 11:00, Celular

                            Péricles, 25/04/2012, 14:00, Pen Drive

                            Marcelo, 25/04/2012, 15:00, Celular

                            Marcelo, 12/04/2012, 17:00, Webcam

                        ] Group By Vendedor, Produto;

                         

                        Lembrando que a tabela resultante é essa:

                         

                        Tabela Resultante:

                         

                        Vendedor

                        Data

                        Hora

                        Produto

                        Péricles

                        25/04/2012

                        14:00

                        Pen Drive

                        Marcelo

                        25/04/2012

                        15:00

                        Celular

                        Paulo

                        25/04/2012

                        16:00

                        Webcam

                          • Pegando as últimas vendas de cada vendedor em uma tabela
                            Cesar Accardi

                            Olá Péricles, se você incluir o Produto nesta carga obrigatoriamente mostrará a última venda de cada Produto por Vendedor. Se o seu objetivo é mostrar a última venda independente do produto você deve carregar o produto em outra tabela que não esteja agregada e usar algum campo para vincular (ex. Código da Venda), este campo obviamente deverá constar no group by.

                              • Pegando as últimas vendas de cada vendedor em uma tabela
                                Aderlan Rodrigues

                                Olá Pericles,

                                 

                                Também não entendi o comportamento do MaxString, ele deveria trazer o resultado correto, funcionando como um Max do agrupamento, algo como o que acontece com o SQL, mas...

                                 

                                Fazendo uma junção da ideia do Cesar com a minha e depois de alguns teste, cheguei no script abaixo, dá o resultado que você precisa, o que é mais importante. Rsrsrrs...

                                 

                                Como o MaxString está fazendo correto com a data, agrupando pelo Vendedor ou pelo Produto, no scrpt abaixo funciona.

                                 

                                Abraço.

                                 

                                Temp:

                                LOAD Vendedor,

                                    Date#(Data&' '&Hora,'dd/MM/yyyy HH:mm') as Data,

                                    Produto

                                INLINE [

                                    Vendedor, Data, Hora, Produto

                                    Péricles, 10/04/2012, 12:00, Webcam

                                    Marcelo, 11/04/2012, 13:00, Celular

                                    Paulo, 12/04/2012, 14:00, Pen Drive

                                    Paulo, 25/04/2012, 16:00, Webcam

                                    Péricles, 13/04/2012, 09:00, Webcam

                                    Péricles, 14/04/2012, 11:00, Celular

                                    Péricles, 25/04/2012, 14:00, Pen Drive

                                    Marcelo, 25/04/2012, 15:00, Celular

                                    Marcelo, 12/04/2012, 17:00, Webcam

                                ];

                                 

                                Vendas:

                                LOAD Vendedor,

                                    MaxString(Data) as Data

                                Resident Temp

                                Group By Vendedor;

                                 

                                Left Join (Vendas)

                                LOAD Produto,

                                    MaxString(Data) as Data

                                Resident Temp

                                Group By Produto;

                                 

                                DROP Table Temp;