Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
];
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;
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
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;
Nossa! Diferença de minutos nas respostas! Rsrsrsrs... Em quanto eu escrevia, você já estava respondendo Cesar! Hahaha!
Fica como complemento... Abraço.
O Aderlan, você não tem o que fazer não? De madrugada respondendo aí? rs....
Abraço.
A reciproca é verdadeira! Rsrsrsr...
Aproveito o tempo livre das 00:00 e as 06:00 para aprender um pouco mais com os feras aqui da community!
Abraço.
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.
tente tirar o maxstring do produto.
deixe apenas na data e hora
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 |
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.